diff --git a/additions/juggler/content/FrameTree.js b/additions/juggler/content/FrameTree.js index 255d9d0..35a5cca 100644 --- a/additions/juggler/content/FrameTree.js +++ b/additions/juggler/content/FrameTree.js @@ -435,6 +435,7 @@ class Frame { wsid: webSocketSerialID + '', opcode: frame.opCode, data: frame.opCode !== 1 ? btoa(frame.payload) : frame.payload, + timestamp: frame.timeStamp / 1_000_000, }); this._webSocketListener = { QueryInterface: ChromeUtils.generateQI([Ci.nsIWebSocketEventListener, ]), @@ -505,6 +506,7 @@ class Frame { wsid: webSocketSerialID + '', opcode: frame.opCode, data: frame.opCode !== 1 ? btoa(frame.payload) : frame.payload, + timestamp: frame.timeStamp / 1_000_000, }); }, }; diff --git a/additions/juggler/protocol/PageHandler.js b/additions/juggler/protocol/PageHandler.js index a8d8c0c..c76c5db 100644 --- a/additions/juggler/protocol/PageHandler.js +++ b/additions/juggler/protocol/PageHandler.js @@ -329,7 +329,7 @@ export class PageHandler { return await this._contentPage.send('adoptNode', options); } - async ['Page.screenshot']({ mimeType, clip, omitDeviceScaleFactor, quality = 80}) { + async ['Page.screenshot']({ mimeType, clip, omitDeviceScaleFactor, quality }) { const rect = new DOMRect(clip.x, clip.y, clip.width, clip.height); const browsingContext = this._pageTarget.linkedBrowser().browsingContext; @@ -374,7 +374,8 @@ export class PageHandler { ctx.drawImage(snapshot, 0, 0); snapshot.close(); - if (mimeType === 'image/jpeg') { + if (mimeType === 'image/jpeg' || mimeType === 'image/webp') { + quality ??= mimeType === 'image/webp' ? 100 : 80; if (quality < 0 || quality > 100) throw new Error('Quality must be an integer value between 0 and 100; received ' + quality); quality /= 100; diff --git a/additions/juggler/protocol/Protocol.js b/additions/juggler/protocol/Protocol.js index 20bd611..ff26ce9 100644 --- a/additions/juggler/protocol/Protocol.js +++ b/additions/juggler/protocol/Protocol.js @@ -77,6 +77,8 @@ pageTypes.Size = { pageTypes.Viewport = { viewportSize: pageTypes.Size, deviceScaleFactor: t.Optional(t.Number), + screenSize: t.Optional(pageTypes.Size), + isMobile: t.Optional(t.Boolean), }; pageTypes.DOMQuad = { @@ -762,12 +764,14 @@ const Page = { wsid: t.String, opcode: t.Number, data: t.String, + timestamp: t.Number, }, 'webSocketFrameReceived': { frameId: t.String, wsid: t.String, opcode: t.Number, data: t.String, + timestamp: t.Number, }, 'screencastFrame': { data: t.String, @@ -806,6 +810,9 @@ const Page = { 'setViewportSize': { params: { viewportSize: t.Nullable(pageTypes.Size), + deviceScaleFactor: t.Optional(t.Number), + screenSize: t.Optional(pageTypes.Size), + isMobile: t.Optional(t.Boolean), }, }, 'setZoom': { @@ -895,7 +902,7 @@ const Page = { }, 'screenshot': { params: { - mimeType: t.Enum(['image/png', 'image/jpeg']), + mimeType: t.Enum(['image/png', 'image/jpeg', 'image/webp']), clip: pageTypes.Clip, quality: t.Optional(t.Number), omitDeviceScaleFactor: t.Optional(t.Boolean), diff --git a/pythonlib/pyproject.toml b/pythonlib/pyproject.toml index 1f0114e..6ed013f 100644 --- a/pythonlib/pyproject.toml +++ b/pythonlib/pyproject.toml @@ -33,7 +33,7 @@ rich = "*" requests = "*" orjson = "*" browserforge = "^1.2.4" -playwright = "<1.61" +playwright = "*" pyyaml = "*" platformdirs = "*" numpy = "*"