diff --git a/src/download.ts b/src/download.ts index 4f03fb60a76a9..b666812527f1c 100644 --- a/src/download.ts +++ b/src/download.ts @@ -39,9 +39,9 @@ export class Download { this._url = url; this._finishedCallback = () => {}; this._finishedPromise = new Promise(f => this._finishedCallback = f); - this._page.emit(Events.Page.Download, this); page._browserContext._downloads.add(this); this._acceptDownloads = !!this._page._browserContext._options.acceptDownloads; + this._page.emit(Events.Page.Download, this); } url(): string { diff --git a/test/download.spec.js b/test/download.spec.js index bc79ae47e0695..995b3c59610fd 100644 --- a/test/download.spec.js +++ b/test/download.spec.js @@ -70,6 +70,19 @@ describe('Download', function() { expect(fs.readFileSync(path).toString()).toBe('Hello world'); await page.close(); }); + it(`should report download path within page.on('download', …) handler`, async({browser, server}) => { + const page = await browser.newPage({ acceptDownloads: true }); + const onDownloadPathPath = new Promise((res) => { + page.on('download', dl => { + dl.path().then(res); + }); + }); + await page.setContent(`download`); + await page.click('a'); + const path = await onDownloadPathPath; + expect(fs.readFileSync(path).toString()).toBe('Hello world'); + await page.close(); + }) it.skip(FFOX).fail(CHROMIUM || WEBKIT)('should report alt-click downloads', async({browser, server}) => { // Firefox does not download on alt-click by default. // Our WebKit embedder does not download on alt-click, although Safari does.