From ba54ad46b30d29a4d14dcd515b12f14a326bbd66 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Tue, 3 Dec 2019 11:47:02 -0700 Subject: [PATCH] feat(page): add Page.setJavaScriptEnabled for WebKit (#125) --- src/frames.ts | 5 +++-- src/webkit/Page.ts | 7 +++++++ test/page.spec.js | 7 +++++-- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/frames.ts b/src/frames.ts index 2a093e65b85c0..33128fd4c6d2b 100644 --- a/src/frames.ts +++ b/src/frames.ts @@ -471,8 +471,9 @@ export class Frame { // In case of multiple sessions to the same target, there's a race between // connections so we might end up creating multiple isolated worlds. // We can use either. - if (!world.context) - this._setContext(worldType, context); + if (world.context) + this._setContext(worldType, null); + this._setContext(worldType, context); } _contextDestroyed(context: js.ExecutionContext) { diff --git a/src/webkit/Page.ts b/src/webkit/Page.ts index bf7272ed2fe7b..6a78435d1c241 100644 --- a/src/webkit/Page.ts +++ b/src/webkit/Page.ts @@ -348,6 +348,13 @@ export class Page extends EventEmitter { await this._session.send('Page.setBootstrapScript', { source }); } + async setJavaScriptEnabled(enabled: boolean) { + if (this._javascriptEnabled === enabled) + return; + this._javascriptEnabled = enabled; + await this._session.send('Emulation.setJavaScriptEnabled', { enabled }); + } + async setCacheEnabled(enabled: boolean = true) { await this._frameManager.networkManager().setCacheEnabled(enabled); } diff --git a/test/page.spec.js b/test/page.spec.js index ca678a37c7b19..a2dab9a638eb9 100644 --- a/test/page.spec.js +++ b/test/page.spec.js @@ -831,12 +831,15 @@ module.exports.addTests = function({testRunner, expect, headless, playwright, FF }); describe('Page.setJavaScriptEnabled', function() { - it.skip(WEBKIT)('should work', async({page, server}) => { + it('should work', async({page, server}) => { await page.setJavaScriptEnabled(false); await page.goto('data:text/html, '); let error = null; await page.evaluate('something').catch(e => error = e); - expect(error.message).toContain('something is not defined'); + if (WEBKIT) + expect(error.message).toContain('Can\'t find variable: something'); + else + expect(error.message).toContain('something is not defined'); await page.setJavaScriptEnabled(true); await page.goto('data:text/html, ');