diff --git a/experimental/puppeteer-firefox/lib/NetworkManager.js b/experimental/puppeteer-firefox/lib/NetworkManager.js index b97081ac..9b10a869 100644 --- a/experimental/puppeteer-firefox/lib/NetworkManager.js +++ b/experimental/puppeteer-firefox/lib/NetworkManager.js @@ -103,6 +103,13 @@ class Request { this._isNavigationRequest = payload.isNavigationRequest; this._method = payload.method; this._resourceType = causeToResourceType[payload.cause] || 'other'; + this._headers = {}; + for (const {name, value} of payload.headers) + this._headers[name.toLowerCase()] = value; + } + + headers() { + return {...this._headers}; } redirectChain() { @@ -141,6 +148,13 @@ class Response { this._remotePort = payload.remotePort; this._status = payload.status; this._statusText = payload.statusText; + this._headers = {}; + for (const {name, value} of payload.headers) + this._headers[name.toLowerCase()] = value; + } + + headers() { + return {...this._headers}; } status() { diff --git a/experimental/puppeteer-firefox/package.json b/experimental/puppeteer-firefox/package.json index f75306bd..1b99f287 100644 --- a/experimental/puppeteer-firefox/package.json +++ b/experimental/puppeteer-firefox/package.json @@ -9,7 +9,7 @@ "node": ">=8.9.4" }, "puppeteer": { - "firefox_revision": "309b4f8466e83360f2045be982d2c61522bcf466" + "firefox_revision": "167f4a537c7d87e967f5c1ce71fc9a100c347c8b" }, "scripts": { "install": "node install.js", diff --git a/test/network.spec.js b/test/network.spec.js index 1e5dcf8a..4b138f5e 100644 --- a/test/network.spec.js +++ b/test/network.spec.js @@ -18,7 +18,7 @@ const fs = require('fs'); const path = require('path'); const utils = require('./utils'); -module.exports.addTests = function({testRunner, expect}) { +module.exports.addTests = function({testRunner, expect, CHROME}) { const {describe, xdescribe, fdescribe, describe_fails_ffox} = testRunner; const {it, fit, xit, it_fails_ffox} = testRunner; const {beforeAll, beforeEach, afterAll, afterEach} = testRunner; @@ -73,6 +73,27 @@ module.exports.addTests = function({testRunner, expect}) { }); }); + describe('Request.headers', function() { + it('should work', async({page, server}) => { + const response = await page.goto(server.EMPTY_PAGE); + if (CHROME) + expect(response.request().headers()['user-agent']).toContain('Chrome'); + else + expect(response.request().headers()['user-agent']).toContain('Firefox'); + }); + }); + + describe('Response.headers', function() { + it('should work', async({page, server}) => { + server.setRoute('/empty.html', (req, res) => { + res.setHeader('foo', 'bar'); + res.end(); + }); + const response = await page.goto(server.EMPTY_PAGE); + expect(response.headers()['foo']).toBe('bar'); + }); + }); + describe_fails_ffox('Response.fromCache', function() { it('should return |false| for non-cached content', async({page, server}) => { const response = await page.goto(server.EMPTY_PAGE);