diff --git a/test/interception.spec.js b/test/interception.spec.js index 1cb70b3455..5195620f8c 100644 --- a/test/interception.spec.js +++ b/test/interception.spec.js @@ -561,19 +561,6 @@ module.exports.describe = function({testRunner, expect, defaultBrowserOptions, p await page.setOfflineMode(false); expect(await page.evaluate(() => window.navigator.onLine)).toBe(true); }); - it('should continue if the interception gets disabled during provisional load', async({page, server}) => { - await page.goto(server.EMPTY_PAGE); - await page.setRequestInterception(true); - expect(await page.evaluate(() => navigator.onLine)).toBe(true); - let intercepted; - page.on('request', async request => { - intercepted = true; - await page.setRequestInterception(false); - }); - const response = await page.goto(server.CROSS_PROCESS_PREFIX + '/empty.html'); - expect(intercepted).toBe(true); - expect(response.status()).toBe(200); - }); }); describe('Interception vs isNavigationRequest', () => { diff --git a/test/network.spec.js b/test/network.spec.js index 544e45cc44..0e81e5c861 100644 --- a/test/network.spec.js +++ b/test/network.spec.js @@ -337,21 +337,6 @@ module.exports.describe = function({testRunner, expect, FFOX, CHROMIUM, WEBKIT}) } expect(error.message).toBe('Expected value of header "foo" to be String, but "number" is found.'); }); - WEBKIT && it('should be pushed to cross-process provisional page', async({page, server}) => { - await page.goto(server.EMPTY_PAGE); - const pagePath = '/one-style.html'; - server.setRoute(pagePath, async (req, res) => { - await page.setExtraHTTPHeaders({ foo: 'bar' }); - server.serveFile(req, res, pagePath); - }); - const [htmlReq, cssReq] = await Promise.all([ - server.waitForRequest(pagePath), - server.waitForRequest('/one-style.css'), - page.goto(server.CROSS_PROCESS_PREFIX + pagePath) - ]); - expect(htmlReq.headers['foo']).toBe(undefined); - expect(cssReq.headers['foo']).toBe('bar'); - }); }); false && describe.skip(FFOX)('WebSocket', function() { diff --git a/test/playwright.spec.js b/test/playwright.spec.js index 2e8257a681..0481419e72 100644 --- a/test/playwright.spec.js +++ b/test/playwright.spec.js @@ -181,6 +181,9 @@ module.exports.describe = ({testRunner, product, playwrightPath}) => { testRunner.loadTests(require('./features/permissions.spec.js'), testOptions); } + if (WEBKIT) { + testRunner.loadTests(require('./webkit/provisional.spec.js'), testOptions); + } }); // Browser-level tests that are given a browser. diff --git a/test/webkit/provisional.spec.js b/test/webkit/provisional.spec.js new file mode 100644 index 0000000000..2ab765bfa1 --- /dev/null +++ b/test/webkit/provisional.spec.js @@ -0,0 +1,61 @@ +/** + * Copyright (c) Microsoft Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +module.exports.describe = function ({ testRunner, expect }) { + const {describe, xdescribe, fdescribe} = testRunner; + const {it, fit, xit, dit} = testRunner; + const {beforeAll, beforeEach, afterAll, afterEach} = testRunner; + + describe('provisional page', function() { + it('extraHttpHeaders should be pushed to provisional page', async({page, server}) => { + await page.goto(server.EMPTY_PAGE); + const pagePath = '/one-style.html'; + server.setRoute(pagePath, async (req, res) => { + await page.setExtraHTTPHeaders({ foo: 'bar' }); + server.serveFile(req, res, pagePath); + }); + const [htmlReq, cssReq] = await Promise.all([ + server.waitForRequest(pagePath), + server.waitForRequest('/one-style.css'), + page.goto(server.CROSS_PROCESS_PREFIX + pagePath) + ]); + expect(htmlReq.headers['foo']).toBe(undefined); + expect(cssReq.headers['foo']).toBe('bar'); + }); + it('should continue load when interception gets disabled during provisional load', async({page, server}) => { + await page.goto(server.EMPTY_PAGE); + await page.setRequestInterception(true); + expect(await page.evaluate(() => navigator.onLine)).toBe(true); + let intercepted = null; + const order = []; + page.on('request', request => { + intercepted = page.setRequestInterception(false).then(() => order.push('setRequestInterception')); + }); + const response = await page.goto(server.CROSS_PROCESS_PREFIX + '/empty.html').then(response => { + order.push('goto'); + return response; + }); + // Should intercept a request. + expect(intercepted).not.toBe(null); + await intercepted; + // Should continue on disabling and load successfully. + expect(response.status()).toBe(200); + // Should resolve setRequestInterception before goto. + expect(order[0]).toBe('setRequestInterception'); + expect(order[1]).toBe('goto'); + }); + }); +};