diff --git a/lib/browser/api/web-contents.js b/lib/browser/api/web-contents.js index 0105a2322bd07..11e1034eecc2a 100644 --- a/lib/browser/api/web-contents.js +++ b/lib/browser/api/web-contents.js @@ -71,7 +71,6 @@ const defaultPrintingSetting = { headerFooterEnabled: false, marginsType: 0, isFirstRequest: false, - requestID: getNextId(), previewUIID: 0, previewModifiable: true, printToPDF: true, @@ -204,7 +203,10 @@ WebContents.prototype.executeJavaScript = function (code, hasUserGesture) { // Translate the options of printToPDF. WebContents.prototype.printToPDF = function (options) { - const printingSetting = Object.assign({}, defaultPrintingSetting) + const printingSetting = { + ...defaultPrintingSetting, + requestID: getNextId() + } if (options.landscape) { printingSetting.landscape = options.landscape } diff --git a/spec-main/api-web-contents-spec.ts b/spec-main/api-web-contents-spec.ts index 9ac84deff121d..71ffed1d2bb68 100644 --- a/spec-main/api-web-contents-spec.ts +++ b/spec-main/api-web-contents-spec.ts @@ -1402,6 +1402,19 @@ describe('webContents module', () => { const data = await w.webContents.printToPDF({}) expect(data).to.be.an.instanceof(Buffer).that.is.not.empty() }) + + it('does not crash when called multiple times', async () => { + const w = new BrowserWindow({ show: false, webPreferences: { sandbox: true } }) + await w.loadURL('data:text/html,

Hello, World!

') + const promises = [] + for (let i = 0; i < 2; i++) { + promises.push(w.webContents.printToPDF({})) + } + const results = await Promise.all(promises) + for (const data of results) { + expect(data).to.be.an.instanceof(Buffer).that.is.not.empty() + } + }) }) describe('PictureInPicture video', () => {