rebrowser-playwright-core 1.47.100 → 1.49.0

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 (156) hide show
  1. package/README.md +1 -1
  2. package/ThirdPartyNotices.txt +70 -384
  3. package/bin/reinstall_chrome_beta_linux.sh +10 -8
  4. package/bin/reinstall_chrome_stable_linux.sh +10 -8
  5. package/bin/reinstall_msedge_beta_linux.sh +11 -9
  6. package/bin/reinstall_msedge_dev_linux.sh +11 -9
  7. package/bin/reinstall_msedge_stable_linux.sh +11 -9
  8. package/browsers.json +24 -12
  9. package/lib/cli/program.js +49 -19
  10. package/lib/client/api.js +6 -0
  11. package/lib/client/browserContext.js +20 -2
  12. package/lib/client/channelOwner.js +6 -2
  13. package/lib/client/connection.js +3 -0
  14. package/lib/client/fetch.js +16 -21
  15. package/lib/client/jsHandle.js +0 -8
  16. package/lib/client/localUtils.js +1 -0
  17. package/lib/client/locator.js +7 -0
  18. package/lib/client/network.js +180 -17
  19. package/lib/client/page.js +25 -2
  20. package/lib/client/playwright.js +6 -3
  21. package/lib/client/tracing.js +29 -20
  22. package/lib/client/waiter.js +15 -11
  23. package/lib/generated/consoleApiSource.js +1 -1
  24. package/lib/generated/injectedScriptSource.js +1 -1
  25. package/lib/generated/pollingRecorderSource.js +7 -0
  26. package/lib/generated/webSocketMockSource.js +7 -0
  27. package/lib/protocol/validator.js +103 -17
  28. package/lib/server/ariaSnapshot.js +33 -0
  29. package/lib/server/bidi/bidiBrowser.js +23 -8
  30. package/lib/server/bidi/bidiChromium.js +124 -0
  31. package/lib/server/bidi/bidiConnection.js +1 -3
  32. package/lib/server/bidi/bidiExecutionContext.js +0 -6
  33. package/lib/server/bidi/bidiFirefox.js +15 -21
  34. package/lib/server/bidi/bidiInput.js +16 -32
  35. package/lib/server/bidi/bidiNetworkManager.js +39 -5
  36. package/lib/server/bidi/bidiOverCdp.js +103 -0
  37. package/lib/server/bidi/bidiPage.js +98 -25
  38. package/lib/server/bidi/bidiPdf.js +140 -0
  39. package/lib/server/bidi/third_party/firefoxPrefs.js +221 -0
  40. package/lib/server/browser.js +13 -2
  41. package/lib/server/browserContext.js +6 -23
  42. package/lib/server/browserType.js +43 -12
  43. package/lib/server/chromium/chromium.js +9 -17
  44. package/lib/server/chromium/chromiumSwitches.js +3 -1
  45. package/lib/server/chromium/crBrowser.js +4 -3
  46. package/lib/server/chromium/crConnection.js +153 -0
  47. package/lib/server/chromium/crExecutionContext.js +0 -20
  48. package/lib/server/chromium/crPage.js +13 -7
  49. package/lib/server/chromium/videoRecorder.js +1 -1
  50. package/lib/server/codegen/csharp.js +12 -17
  51. package/lib/server/codegen/java.js +5 -8
  52. package/lib/server/codegen/javascript.js +29 -7
  53. package/lib/server/codegen/language.js +14 -2
  54. package/lib/server/codegen/python.js +13 -17
  55. package/lib/server/cookieStore.js +73 -0
  56. package/lib/server/debugController.js +10 -7
  57. package/lib/server/deviceDescriptorsSource.json +127 -127
  58. package/lib/server/dialog.js +1 -0
  59. package/lib/server/dispatchers/androidDispatcher.js +13 -2
  60. package/lib/server/dispatchers/browserContextDispatcher.js +19 -2
  61. package/lib/server/dispatchers/debugControllerDispatcher.js +1 -1
  62. package/lib/server/dispatchers/dispatcher.js +1 -1
  63. package/lib/server/dispatchers/frameDispatcher.js +8 -1
  64. package/lib/server/dispatchers/jsHandleDispatcher.js +0 -5
  65. package/lib/server/dispatchers/pageDispatcher.js +9 -0
  66. package/lib/server/dispatchers/playwrightDispatcher.js +2 -1
  67. package/lib/server/dispatchers/tracingDispatcher.js +10 -0
  68. package/lib/server/dispatchers/webSocketRouteDispatcher.js +189 -0
  69. package/lib/server/dom.js +79 -36
  70. package/lib/server/download.js +9 -2
  71. package/lib/server/fetch.js +105 -96
  72. package/lib/server/firefox/ffBrowser.js +6 -4
  73. package/lib/server/firefox/ffExecutionContext.js +0 -15
  74. package/lib/server/firefox/ffNetworkManager.js +1 -1
  75. package/lib/server/firefox/ffPage.js +6 -3
  76. package/lib/server/firefox/firefox.js +2 -13
  77. package/lib/server/frameSelectors.js +1 -1
  78. package/lib/server/frames.js +68 -67
  79. package/lib/server/har/harTracer.js +11 -0
  80. package/lib/server/index.js +0 -6
  81. package/lib/server/input.js +0 -1
  82. package/lib/server/javascript.js +0 -13
  83. package/lib/server/page.js +53 -9
  84. package/lib/server/playwright.js +5 -2
  85. package/lib/server/progress.js +0 -3
  86. package/lib/server/recorder/contextRecorder.js +33 -50
  87. package/lib/server/recorder/recorderApp.js +22 -25
  88. package/lib/server/recorder/recorderCollection.js +68 -79
  89. package/lib/server/recorder/recorderInTraceViewer.js +144 -0
  90. package/lib/server/recorder/recorderRunner.js +75 -97
  91. package/lib/server/recorder/recorderUtils.js +48 -6
  92. package/lib/server/recorder.js +87 -47
  93. package/lib/server/registry/index.js +154 -26
  94. package/lib/server/registry/nativeDeps.js +6 -3
  95. package/lib/server/socksClientCertificatesInterceptor.js +15 -3
  96. package/lib/server/trace/recorder/snapshotter.js +2 -12
  97. package/lib/server/trace/recorder/snapshotterInjected.js +21 -3
  98. package/lib/server/trace/recorder/tracing.js +127 -17
  99. package/lib/server/trace/test/inMemorySnapshotter.js +4 -4
  100. package/lib/server/trace/viewer/traceViewer.js +4 -6
  101. package/lib/server/webkit/webkit.js +1 -1
  102. package/lib/server/webkit/wkBrowser.js +8 -7
  103. package/lib/server/webkit/wkExecutionContext.js +0 -16
  104. package/lib/server/webkit/wkPage.js +11 -4
  105. package/lib/utils/comparators.js +12 -30
  106. package/lib/utils/crypto.js +1 -4
  107. package/lib/utils/happy-eyeballs.js +13 -0
  108. package/lib/utils/hostPlatform.js +8 -2
  109. package/lib/utils/httpServer.js +1 -0
  110. package/lib/utils/isomorphic/ariaSnapshot.js +267 -0
  111. package/lib/utils/isomorphic/locatorGenerators.js +30 -21
  112. package/lib/utils/isomorphic/locatorParser.js +2 -2
  113. package/lib/utils/isomorphic/recorderUtils.js +227 -0
  114. package/lib/utils/isomorphic/stringUtils.js +30 -0
  115. package/lib/utils/isomorphic/urlMatch.js +5 -1
  116. package/lib/utils/network.js +1 -1
  117. package/lib/utils/sequence.js +64 -0
  118. package/lib/utils/stackTrace.js +16 -3
  119. package/lib/utils/zones.js +32 -23
  120. package/lib/utilsBundle.js +4 -5
  121. package/lib/utilsBundleImpl/index.js +190 -33
  122. package/lib/vite/htmlReport/index.html +19 -16
  123. package/lib/vite/recorder/assets/codeMirrorModule-AFvV6hAs.js +24 -0
  124. package/lib/vite/recorder/assets/index-_cTWgVuJ.js +184 -0
  125. package/lib/vite/recorder/assets/{index-B-MT5gKo.css → index-iA1aAGZg.css} +1 -1
  126. package/lib/vite/recorder/index.html +2 -2
  127. package/lib/vite/traceViewer/assets/codeMirrorModule-KatbITLF.js +24 -0
  128. package/lib/vite/traceViewer/assets/inspectorTab-DdpLd2bb.js +68 -0
  129. package/lib/vite/traceViewer/assets/workbench-CdYbzWFD.js +9 -0
  130. package/lib/vite/traceViewer/embedded.6m3UZh7r.js +2 -0
  131. package/lib/vite/traceViewer/embedded.html +5 -3
  132. package/lib/vite/traceViewer/index.WUV-8boJ.js +2 -0
  133. package/lib/vite/traceViewer/index.html +24 -5
  134. package/lib/vite/traceViewer/inspectorTab.DEOUW62d.css +1 -0
  135. package/lib/vite/traceViewer/recorder.B_SY1GJM.css +0 -0
  136. package/lib/vite/traceViewer/recorder.OT2tVHgn.js +2 -0
  137. package/lib/vite/traceViewer/recorder.html +17 -0
  138. package/lib/vite/traceViewer/sw.bundle.js +3 -3
  139. package/lib/vite/traceViewer/uiMode.BZBTyvGn.js +5 -0
  140. package/lib/vite/traceViewer/uiMode.html +6 -4
  141. package/lib/vite/traceViewer/{uiMode.D3cNFP6u.css → uiMode.voC1ZiOQ.css} +1 -1
  142. package/lib/vite/traceViewer/workbench.C-zR9ysA.css +1 -0
  143. package/package.json +1 -1
  144. package/types/protocol.d.ts +135 -16
  145. package/types/types.d.ts +2149 -965
  146. package/lib/generated/recorderSource.js +0 -7
  147. package/lib/third_party/diff_match_patch.js +0 -2222
  148. package/lib/vite/recorder/assets/codeMirrorModule-aW6Vz3gf.js +0 -24
  149. package/lib/vite/recorder/assets/index-DCpXOVIh.js +0 -47
  150. package/lib/vite/traceViewer/assets/codeMirrorModule-eFKCUIu2.js +0 -24
  151. package/lib/vite/traceViewer/assets/workbench-D0cirtfA.js +0 -72
  152. package/lib/vite/traceViewer/embedded.BkuvsLJp.js +0 -2
  153. package/lib/vite/traceViewer/index.C968kAiC.js +0 -2
  154. package/lib/vite/traceViewer/uiMode.BkFnr4V0.js +0 -10
  155. package/lib/vite/traceViewer/workbench.DjbIuxix.css +0 -1
  156. /package/lib/server/recorder/{recorderActions.js → recorderFrontend.js} +0 -0
@@ -38,6 +38,7 @@ class Dialog extends _instrumentation.SdkObject {
38
38
  this._onHandle = onHandle;
39
39
  this._defaultValue = defaultValue || '';
40
40
  this._page._frameManager.dialogDidOpen(this);
41
+ this.instrumentation.onDialog(this);
41
42
  }
42
43
  page() {
43
44
  return this._page;
@@ -96,8 +96,10 @@ class AndroidDeviceDispatcher extends _dispatcher.Dispatcher {
96
96
  await this._object.send('swipe', params);
97
97
  }
98
98
  async info(params) {
99
+ const info = await this._object.send('info', params);
100
+ fixupAndroidElementInfo(info);
99
101
  return {
100
- info: await this._object.send('info', params)
102
+ info
101
103
  };
102
104
  }
103
105
  async inputType(params) {
@@ -190,4 +192,13 @@ class AndroidSocketDispatcher extends _dispatcher.Dispatcher {
190
192
  }
191
193
  }
192
194
  exports.AndroidSocketDispatcher = AndroidSocketDispatcher;
193
- const keyMap = new Map([['Unknown', 0], ['SoftLeft', 1], ['SoftRight', 2], ['Home', 3], ['Back', 4], ['Call', 5], ['EndCall', 6], ['0', 7], ['1', 8], ['2', 9], ['3', 10], ['4', 11], ['5', 12], ['6', 13], ['7', 14], ['8', 15], ['9', 16], ['Star', 17], ['*', 17], ['Pound', 18], ['#', 18], ['DialUp', 19], ['DialDown', 20], ['DialLeft', 21], ['DialRight', 22], ['DialCenter', 23], ['VolumeUp', 24], ['VolumeDown', 25], ['Power', 26], ['Camera', 27], ['Clear', 28], ['A', 29], ['B', 30], ['C', 31], ['D', 32], ['E', 33], ['F', 34], ['G', 35], ['H', 36], ['I', 37], ['J', 38], ['K', 39], ['L', 40], ['M', 41], ['N', 42], ['O', 43], ['P', 44], ['Q', 45], ['R', 46], ['S', 47], ['T', 48], ['U', 49], ['V', 50], ['W', 51], ['X', 52], ['Y', 53], ['Z', 54], ['Comma', 55], [',', 55], ['Period', 56], ['.', 56], ['AltLeft', 57], ['AltRight', 58], ['ShiftLeft', 59], ['ShiftRight', 60], ['Tab', 61], ['\t', 61], ['Space', 62], [' ', 62], ['Sym', 63], ['Explorer', 64], ['Envelop', 65], ['Enter', 66], ['Del', 67], ['Grave', 68], ['Minus', 69], ['-', 69], ['Equals', 70], ['=', 70], ['LeftBracket', 71], ['(', 71], ['RightBracket', 72], [')', 72], ['Backslash', 73], ['\\', 73], ['Semicolon', 74], [';', 74], ['Apostrophe', 75], ['`', 75], ['Slash', 76], ['/', 76], ['At', 77], ['@', 77], ['Num', 78], ['HeadsetHook', 79], ['Focus', 80], ['Plus', 81], ['Menu', 82], ['Notification', 83], ['Search', 84], ['ChannelUp', 166], ['ChannelDown', 167], ['AppSwitch', 187], ['Assist', 219], ['Cut', 277], ['Copy', 278], ['Paste', 279]]);
195
+ const keyMap = new Map([['Unknown', 0], ['SoftLeft', 1], ['SoftRight', 2], ['Home', 3], ['Back', 4], ['Call', 5], ['EndCall', 6], ['0', 7], ['1', 8], ['2', 9], ['3', 10], ['4', 11], ['5', 12], ['6', 13], ['7', 14], ['8', 15], ['9', 16], ['Star', 17], ['*', 17], ['Pound', 18], ['#', 18], ['DialUp', 19], ['DialDown', 20], ['DialLeft', 21], ['DialRight', 22], ['DialCenter', 23], ['VolumeUp', 24], ['VolumeDown', 25], ['Power', 26], ['Camera', 27], ['Clear', 28], ['A', 29], ['B', 30], ['C', 31], ['D', 32], ['E', 33], ['F', 34], ['G', 35], ['H', 36], ['I', 37], ['J', 38], ['K', 39], ['L', 40], ['M', 41], ['N', 42], ['O', 43], ['P', 44], ['Q', 45], ['R', 46], ['S', 47], ['T', 48], ['U', 49], ['V', 50], ['W', 51], ['X', 52], ['Y', 53], ['Z', 54], ['Comma', 55], [',', 55], ['Period', 56], ['.', 56], ['AltLeft', 57], ['AltRight', 58], ['ShiftLeft', 59], ['ShiftRight', 60], ['Tab', 61], ['\t', 61], ['Space', 62], [' ', 62], ['Sym', 63], ['Explorer', 64], ['Envelop', 65], ['Enter', 66], ['Del', 67], ['Grave', 68], ['Minus', 69], ['-', 69], ['Equals', 70], ['=', 70], ['LeftBracket', 71], ['(', 71], ['RightBracket', 72], [')', 72], ['Backslash', 73], ['\\', 73], ['Semicolon', 74], [';', 74], ['Apostrophe', 75], ['`', 75], ['Slash', 76], ['/', 76], ['At', 77], ['@', 77], ['Num', 78], ['HeadsetHook', 79], ['Focus', 80], ['Plus', 81], ['Menu', 82], ['Notification', 83], ['Search', 84], ['ChannelUp', 166], ['ChannelDown', 167], ['AppSwitch', 187], ['Assist', 219], ['Cut', 277], ['Copy', 278], ['Paste', 279]]);
196
+ function fixupAndroidElementInfo(info) {
197
+ // Some of the properties are nullable, see https://developer.android.com/reference/androidx/test/uiautomator/UiObject2.
198
+ info.clazz = info.clazz || '';
199
+ info.pkg = info.pkg || '';
200
+ info.res = info.res || '';
201
+ info.desc = info.desc || '';
202
+ info.text = info.text || '';
203
+ for (const child of info.children || []) fixupAndroidElementInfo(child);
204
+ }
@@ -20,7 +20,9 @@ var _writableStreamDispatcher = require("./writableStreamDispatcher");
20
20
  var _dialogDispatcher = require("./dialogDispatcher");
21
21
  var _errors = require("../errors");
22
22
  var _elementHandlerDispatcher = require("./elementHandlerDispatcher");
23
+ var _recorderInTraceViewer = require("../recorder/recorderInTraceViewer");
23
24
  var _recorderApp = require("../recorder/recorderApp");
25
+ var _webSocketRouteDispatcher = require("./webSocketRouteDispatcher");
24
26
  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); }
25
27
  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; }
26
28
  /**
@@ -54,6 +56,7 @@ class BrowserContextDispatcher extends _dispatcher.Dispatcher {
54
56
  this._type_BrowserContext = true;
55
57
  this._context = void 0;
56
58
  this._subscriptions = new Set();
59
+ this._webSocketInterceptionPatterns = [];
57
60
  this.adopt(requestContext);
58
61
  this.adopt(tracing);
59
62
  this._context = context;
@@ -279,6 +282,10 @@ class BrowserContextDispatcher extends _dispatcher.Dispatcher {
279
282
  return true;
280
283
  });
281
284
  }
285
+ async setWebSocketInterceptionPatterns(params, metadata) {
286
+ this._webSocketInterceptionPatterns = params.patterns;
287
+ if (params.patterns.length) await _webSocketRouteDispatcher.WebSocketRouteDispatcher.installIfNeeded(this, this._context);
288
+ }
282
289
  async storageState(params, metadata) {
283
290
  return await this._context.storageState();
284
291
  }
@@ -286,8 +293,18 @@ class BrowserContextDispatcher extends _dispatcher.Dispatcher {
286
293
  metadata.potentiallyClosesScope = true;
287
294
  await this._context.close(params);
288
295
  }
289
- async recorderSupplementEnable(params) {
290
- await _recorder.Recorder.show(this._context, _recorderApp.RecorderApp.factory(this._context), params);
296
+ async enableRecorder(params) {
297
+ if (params.codegenMode === 'trace-events') {
298
+ await this._context.tracing.start({
299
+ name: 'trace',
300
+ snapshots: true,
301
+ screenshots: true,
302
+ live: true
303
+ });
304
+ await _recorder.Recorder.show('trace-events', this._context, _recorderInTraceViewer.RecorderInTraceViewer.factory(this._context), params);
305
+ } else {
306
+ await _recorder.Recorder.show('actions', this._context, _recorderApp.RecorderApp.factory(this._context), params);
307
+ }
291
308
  }
292
309
  async pause(params, metadata) {
293
310
  // Debugger will take care of this.
@@ -81,7 +81,7 @@ class DebugControllerDispatcher extends _dispatcher.Dispatcher {
81
81
  await this._object.setRecorderMode(params);
82
82
  }
83
83
  async highlight(params) {
84
- await this._object.highlight(params.selector);
84
+ await this._object.highlight(params);
85
85
  }
86
86
  async hideHighlight() {
87
87
  await this._object.hideHighlight();
@@ -384,7 +384,7 @@ class DispatcherConnection {
384
384
  callMetadata.endTime = (0, _utils.monotonicTime)();
385
385
  await (sdkObject === null || sdkObject === void 0 ? void 0 : sdkObject.instrumentation.onAfterCall(sdkObject, callMetadata));
386
386
  }
387
- if (response.error) response.log = callMetadata.log;
387
+ if (response.error) response.log = (0, _utils.compressCallLog)(callMetadata.log);
388
388
  this.onmessage(response);
389
389
  }
390
390
  }
@@ -10,6 +10,7 @@ var _elementHandlerDispatcher = require("./elementHandlerDispatcher");
10
10
  var _jsHandleDispatcher = require("./jsHandleDispatcher");
11
11
  var _networkDispatchers = require("./networkDispatchers");
12
12
  var _utils = require("../../utils");
13
+ var _ariaSnapshot = require("../ariaSnapshot");
13
14
  /**
14
15
  * Copyright (c) Microsoft Corporation.
15
16
  *
@@ -274,7 +275,8 @@ class FrameDispatcher extends _dispatcher.Dispatcher {
274
275
  }
275
276
  async expect(params, metadata) {
276
277
  metadata.potentiallyClosesScope = true;
277
- const expectedValue = params.expectedValue ? (0, _jsHandleDispatcher.parseArgument)(params.expectedValue) : undefined;
278
+ let expectedValue = params.expectedValue ? (0, _jsHandleDispatcher.parseArgument)(params.expectedValue) : undefined;
279
+ if (params.expression === 'to.match.aria' && expectedValue) expectedValue = (0, _ariaSnapshot.parseAriaSnapshot)(expectedValue);
278
280
  const result = await this._frame.expect(metadata, params.selector, {
279
281
  ...params,
280
282
  expectedValue
@@ -282,5 +284,10 @@ class FrameDispatcher extends _dispatcher.Dispatcher {
282
284
  if (result.received !== undefined) result.received = (0, _jsHandleDispatcher.serializeResult)(result.received);
283
285
  return result;
284
286
  }
287
+ async ariaSnapshot(params, metadata) {
288
+ return {
289
+ snapshot: await this._frame.ariaSnapshot(metadata, params.selector, params)
290
+ };
291
+ }
285
292
  }
286
293
  exports.FrameDispatcher = FrameDispatcher;
@@ -74,11 +74,6 @@ class JSHandleDispatcher extends _dispatcher.Dispatcher {
74
74
  value: serializeResult(await this._object.jsonValue())
75
75
  };
76
76
  }
77
- async objectCount(params) {
78
- return {
79
- count: await this._object.objectCount()
80
- };
81
- }
82
77
  async dispose(_, metadata) {
83
78
  metadata.potentiallyClosesScope = true;
84
79
  this._object.dispose();
@@ -13,6 +13,7 @@ var _jsHandleDispatcher = require("./jsHandleDispatcher");
13
13
  var _elementHandlerDispatcher = require("./elementHandlerDispatcher");
14
14
  var _artifactDispatcher = require("./artifactDispatcher");
15
15
  var _utils = require("../../utils");
16
+ var _webSocketRouteDispatcher = require("./webSocketRouteDispatcher");
16
17
  /**
17
18
  * Copyright (c) Microsoft Corporation.
18
19
  *
@@ -54,6 +55,7 @@ class PageDispatcher extends _dispatcher.Dispatcher {
54
55
  this._type_Page = true;
55
56
  this._page = void 0;
56
57
  this._subscriptions = new Set();
58
+ this._webSocketInterceptionPatterns = [];
57
59
  this.adopt(mainFrame);
58
60
  this._page = page;
59
61
  this.addObjectListener(_page.Page.Events.Close, () => {
@@ -133,6 +135,9 @@ class PageDispatcher extends _dispatcher.Dispatcher {
133
135
  response: _networkDispatchers.ResponseDispatcher.fromNullable(this.parentScope(), await this._page.goForward(metadata, params))
134
136
  };
135
137
  }
138
+ async requestGC(params, metadata) {
139
+ await this._page.requestGC();
140
+ }
136
141
  async registerLocatorHandler(params, metadata) {
137
142
  const uid = this._page.registerLocatorHandler(params.selector, params.noWaitAfter);
138
143
  return {
@@ -174,6 +179,10 @@ class PageDispatcher extends _dispatcher.Dispatcher {
174
179
  return true;
175
180
  });
176
181
  }
182
+ async setWebSocketInterceptionPatterns(params, metadata) {
183
+ this._webSocketInterceptionPatterns = params.patterns;
184
+ if (params.patterns.length) await _webSocketRouteDispatcher.WebSocketRouteDispatcher.installIfNeeded(this.parentScope(), this._page);
185
+ }
177
186
  async expectScreenshot(params, metadata) {
178
187
  const mask = (params.mask || []).map(({
179
188
  frame,
@@ -39,9 +39,10 @@ class PlaywrightDispatcher extends _dispatcher.Dispatcher {
39
39
  const prelaunchedAndroidDeviceDispatcher = prelaunchedAndroidDevice ? new _androidDispatcher.AndroidDeviceDispatcher(android, prelaunchedAndroidDevice) : undefined;
40
40
  super(scope, playwright, 'Playwright', {
41
41
  chromium: new _browserTypeDispatcher.BrowserTypeDispatcher(scope, playwright.chromium),
42
- bidi: new _browserTypeDispatcher.BrowserTypeDispatcher(scope, playwright.bidi),
43
42
  firefox: new _browserTypeDispatcher.BrowserTypeDispatcher(scope, playwright.firefox),
44
43
  webkit: new _browserTypeDispatcher.BrowserTypeDispatcher(scope, playwright.webkit),
44
+ bidiChromium: new _browserTypeDispatcher.BrowserTypeDispatcher(scope, playwright.bidiChromium),
45
+ bidiFirefox: new _browserTypeDispatcher.BrowserTypeDispatcher(scope, playwright.bidiFirefox),
45
46
  android,
46
47
  electron: new _electronDispatcher.ElectronDispatcher(scope, playwright.electron),
47
48
  utils: playwright.options.isServer ? undefined : new _localUtilsDispatcher.LocalUtilsDispatcher(scope, playwright),
@@ -37,6 +37,16 @@ class TracingDispatcher extends _dispatcher.Dispatcher {
37
37
  async tracingStartChunk(params) {
38
38
  return await this._object.startChunk(params);
39
39
  }
40
+ async tracingGroup(params, metadata) {
41
+ const {
42
+ name,
43
+ location
44
+ } = params;
45
+ await this._object.group(name, location, metadata);
46
+ }
47
+ async tracingGroupEnd(params) {
48
+ await this._object.groupEnd();
49
+ }
40
50
  async tracingStopChunk(params) {
41
51
  const {
42
52
  artifact,
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.WebSocketRouteDispatcher = void 0;
7
+ var _page = require("../page");
8
+ var _dispatcher = require("./dispatcher");
9
+ var _utils = require("../../utils");
10
+ var _pageDispatcher = require("./pageDispatcher");
11
+ var webSocketMockSource = _interopRequireWildcard(require("../../generated/webSocketMockSource"));
12
+ var _eventsHelper = require("../../utils/eventsHelper");
13
+ var _class;
14
+ /**
15
+ * Copyright (c) Microsoft Corporation.
16
+ *
17
+ * Licensed under the Apache License, Version 2.0 (the 'License');
18
+ * you may not use this file except in compliance with the License.
19
+ * You may obtain a copy of the License at
20
+ *
21
+ * http://www.apache.org/licenses/LICENSE-2.0
22
+ *
23
+ * Unless required by applicable law or agreed to in writing, software
24
+ * distributed under the License is distributed on an 'AS IS' BASIS,
25
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
26
+ * See the License for the specific language governing permissions and
27
+ * limitations under the License.
28
+ */
29
+ 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); }
30
+ 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; }
31
+ const kBindingInstalledSymbol = Symbol('webSocketRouteBindingInstalled');
32
+ const kInitScriptInstalledSymbol = Symbol('webSocketRouteInitScriptInstalled');
33
+ class WebSocketRouteDispatcher extends _dispatcher.Dispatcher {
34
+ constructor(scope, id, url, frame) {
35
+ super(scope, {
36
+ guid: 'webSocketRoute@' + (0, _utils.createGuid)()
37
+ }, 'WebSocketRoute', {
38
+ url
39
+ });
40
+ this._type_WebSocketRoute = true;
41
+ this._id = void 0;
42
+ this._frame = void 0;
43
+ this._id = id;
44
+ this._frame = frame;
45
+ this._eventListeners.push(
46
+ // When the frame navigates or detaches, there will be no more communication
47
+ // from the mock websocket, so pretend like it was closed.
48
+ _eventsHelper.eventsHelper.addEventListener(frame._page, _page.Page.Events.InternalFrameNavigatedToNewDocument, frame => {
49
+ if (frame === this._frame) this._executionContextGone();
50
+ }), _eventsHelper.eventsHelper.addEventListener(frame._page, _page.Page.Events.FrameDetached, frame => {
51
+ if (frame === this._frame) this._executionContextGone();
52
+ }), _eventsHelper.eventsHelper.addEventListener(frame._page, _page.Page.Events.Close, () => this._executionContextGone()), _eventsHelper.eventsHelper.addEventListener(frame._page, _page.Page.Events.Crash, () => this._executionContextGone()));
53
+ WebSocketRouteDispatcher._idToDispatcher.set(this._id, this);
54
+ scope._dispatchEvent('webSocketRoute', {
55
+ webSocketRoute: this
56
+ });
57
+ }
58
+ static async installIfNeeded(contextDispatcher, target) {
59
+ const context = target instanceof _page.Page ? target.context() : target;
60
+ if (!context[kBindingInstalledSymbol]) {
61
+ context[kBindingInstalledSymbol] = true;
62
+ await context.exposeBinding('__pwWebSocketBinding', false, (source, payload) => {
63
+ if (payload.type === 'onCreate') {
64
+ const pageDispatcher = _pageDispatcher.PageDispatcher.fromNullable(contextDispatcher, source.page);
65
+ let scope;
66
+ if (pageDispatcher && matchesPattern(pageDispatcher, context._options.baseURL, payload.url)) scope = pageDispatcher;else if (matchesPattern(contextDispatcher, context._options.baseURL, payload.url)) scope = contextDispatcher;
67
+ if (scope) {
68
+ new WebSocketRouteDispatcher(scope, payload.id, payload.url, source.frame);
69
+ } else {
70
+ const request = {
71
+ id: payload.id,
72
+ type: 'passthrough'
73
+ };
74
+ source.frame.evaluateExpression(`globalThis.__pwWebSocketDispatch(${JSON.stringify(request)})`).catch(() => {});
75
+ }
76
+ return;
77
+ }
78
+ const dispatcher = WebSocketRouteDispatcher._idToDispatcher.get(payload.id);
79
+ if (payload.type === 'onMessageFromPage') dispatcher === null || dispatcher === void 0 || dispatcher._dispatchEvent('messageFromPage', {
80
+ message: payload.data.data,
81
+ isBase64: payload.data.isBase64
82
+ });
83
+ if (payload.type === 'onMessageFromServer') dispatcher === null || dispatcher === void 0 || dispatcher._dispatchEvent('messageFromServer', {
84
+ message: payload.data.data,
85
+ isBase64: payload.data.isBase64
86
+ });
87
+ if (payload.type === 'onClosePage') dispatcher === null || dispatcher === void 0 || dispatcher._dispatchEvent('closePage', {
88
+ code: payload.code,
89
+ reason: payload.reason,
90
+ wasClean: payload.wasClean
91
+ });
92
+ if (payload.type === 'onCloseServer') dispatcher === null || dispatcher === void 0 || dispatcher._dispatchEvent('closeServer', {
93
+ code: payload.code,
94
+ reason: payload.reason,
95
+ wasClean: payload.wasClean
96
+ });
97
+ });
98
+ }
99
+ if (!target[kInitScriptInstalledSymbol]) {
100
+ target[kInitScriptInstalledSymbol] = true;
101
+ await target.addInitScript(`
102
+ (() => {
103
+ const module = {};
104
+ ${webSocketMockSource.source}
105
+ (module.exports.inject())(globalThis);
106
+ })();
107
+ `);
108
+ }
109
+ }
110
+ async connect(params) {
111
+ await this._evaluateAPIRequest({
112
+ id: this._id,
113
+ type: 'connect'
114
+ });
115
+ }
116
+ async ensureOpened(params) {
117
+ await this._evaluateAPIRequest({
118
+ id: this._id,
119
+ type: 'ensureOpened'
120
+ });
121
+ }
122
+ async sendToPage(params) {
123
+ await this._evaluateAPIRequest({
124
+ id: this._id,
125
+ type: 'sendToPage',
126
+ data: {
127
+ data: params.message,
128
+ isBase64: params.isBase64
129
+ }
130
+ });
131
+ }
132
+ async sendToServer(params) {
133
+ await this._evaluateAPIRequest({
134
+ id: this._id,
135
+ type: 'sendToServer',
136
+ data: {
137
+ data: params.message,
138
+ isBase64: params.isBase64
139
+ }
140
+ });
141
+ }
142
+ async closePage(params) {
143
+ await this._evaluateAPIRequest({
144
+ id: this._id,
145
+ type: 'closePage',
146
+ code: params.code,
147
+ reason: params.reason,
148
+ wasClean: params.wasClean
149
+ });
150
+ }
151
+ async closeServer(params) {
152
+ await this._evaluateAPIRequest({
153
+ id: this._id,
154
+ type: 'closeServer',
155
+ code: params.code,
156
+ reason: params.reason,
157
+ wasClean: params.wasClean
158
+ });
159
+ }
160
+ async _evaluateAPIRequest(request) {
161
+ await this._frame.evaluateExpression(`globalThis.__pwWebSocketDispatch(${JSON.stringify(request)})`).catch(() => {});
162
+ }
163
+ _onDispose() {
164
+ WebSocketRouteDispatcher._idToDispatcher.delete(this._id);
165
+ }
166
+ _executionContextGone() {
167
+ // We could enter here after being disposed upon page closure:
168
+ // - first from the recursive dispose inintiated by PageDispatcher;
169
+ // - then from our own page.on('close') listener.
170
+ if (!this._disposed) {
171
+ this._dispatchEvent('closePage', {
172
+ wasClean: true
173
+ });
174
+ this._dispatchEvent('closeServer', {
175
+ wasClean: true
176
+ });
177
+ }
178
+ }
179
+ }
180
+ exports.WebSocketRouteDispatcher = WebSocketRouteDispatcher;
181
+ _class = WebSocketRouteDispatcher;
182
+ WebSocketRouteDispatcher._idToDispatcher = new Map();
183
+ function matchesPattern(dispatcher, baseURL, url) {
184
+ for (const pattern of dispatcher._webSocketInterceptionPatterns || []) {
185
+ const urlMatch = pattern.regexSource ? new RegExp(pattern.regexSource, pattern.regexFlags) : pattern.glob;
186
+ if ((0, _utils.urlMatches)(baseURL, url, urlMatch)) return true;
187
+ }
188
+ return false;
189
+ }