From 763b9ab8d8aaa93087048db8a282edc5b2f4f102 Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Thu, 16 Feb 2017 03:44:40 +0530 Subject: [PATCH] add zoom spec --- spec/api-web-contents-spec.js | 123 +++++++++++++++++++++++++++++++++- spec/static/main.js | 3 +- 2 files changed, 124 insertions(+), 2 deletions(-) diff --git a/spec/api-web-contents-spec.js b/spec/api-web-contents-spec.js index 0faaafbcda70..c9538e848027 100644 --- a/spec/api-web-contents-spec.js +++ b/spec/api-web-contents-spec.js @@ -1,11 +1,12 @@ 'use strict' const assert = require('assert') +const http = require('http') const path = require('path') const {closeWindow} = require('./window-helpers') const {ipcRenderer, remote} = require('electron') -const {BrowserWindow, webContents, ipcMain} = remote +const {BrowserWindow, webContents, ipcMain, session} = remote const isCi = remote.getGlobal('isCi') @@ -322,4 +323,124 @@ describe('webContents module', function () { }) }) }) + + describe('zoom api', () => { + const zoomScheme = remote.getGlobal('zoomScheme') + const hostZoomMap = { + 'host1': 0.3, + 'host2': 0.7, + 'host3': 0.2 + } + + before((done) => { + let protocol = session.defaultSession.protocol + protocol.registerStringProtocol(zoomScheme, (request, callback) => { + let response = `` + callback({data: response, mimeType: 'text/html'}) + }, (error) => done(error)) + }) + + after((done) => { + let protocol = session.defaultSession.protocol + protocol.unregisterProtocol(zoomScheme, (error) => done(error)) + }) + + it('can set the correct zoom level', (done) => { + w.loadURL('about:blank') + w.webContents.on('did-finish-load', () => { + w.webContents.getZoomLevel((zoomLevel) => { + assert.equal(zoomLevel, 0.0) + w.webContents.setZoomLevel(0.5) + w.webContents.getZoomLevel((zoomLevel) => { + assert.equal(zoomLevel, 0.5) + w.webContents.setZoomLevel(0) + done() + }) + }) + }) + }) + + it('can persist zoom level across navigation', (done) => { + let finalNavigation = false + ipcMain.on('set-zoom', (e, host) => { + let zoomLevel = hostZoomMap[host] + if (!finalNavigation) { + w.webContents.setZoomLevel(zoomLevel) + } + e.sender.send(`${host}-zoom-set`) + }) + ipcMain.on('host1-zoom-level', (e, zoomLevel) => { + let expectedZoomLevel = hostZoomMap['host1'] + assert.equal(zoomLevel, expectedZoomLevel) + if (finalNavigation) { + done() + } else { + w.loadURL(`${zoomScheme}://host2`) + } + }) + ipcMain.once('host2-zoom-level', (e, zoomLevel) => { + let expectedZoomLevel = hostZoomMap['host2'] + assert.equal(zoomLevel, expectedZoomLevel) + finalNavigation = true + w.webContents.goBack() + }) + w.loadURL(`${zoomScheme}://host1`) + }) + + it('can propagate zoom level across same session', (done) => { + const w2 = new BrowserWindow({ + show: false + }) + w2.webContents.on('did-finish-load', () => { + w.webContents.getZoomLevel((zoomLevel1) => { + assert.equal(zoomLevel1, hostZoomMap['host3']) + w2.webContents.getZoomLevel((zoomLevel2) => { + assert.equal(zoomLevel1, zoomLevel2) + w2.setClosable(true) + w2.close() + done() + }) + }) + }) + w.webContents.on('did-finish-load', () => { + w.webContents.setZoomLevel(hostZoomMap['host3']) + w2.loadURL(`${zoomScheme}://host3`) + }) + w.loadURL(`${zoomScheme}://host3`) + }) + + it('can persist when it contains iframe', (done) => { + const server = http.createServer(function (req, res) { + setTimeout(() => { + res.end() + }, 2000) + }) + server.listen(0, '127.0.0.1', function () { + const url = 'http://127.0.0.1:' + server.address().port + const content = `` + w.webContents.on('did-frame-finish-load', (e, isMainFrame) => { + if (!isMainFrame) { + w.webContents.getZoomLevel((zoomLevel) => { + assert.equal(zoomLevel, 2.0) + w.webContents.setZoomLevel(0) + server.close() + done() + }) + } + }) + w.webContents.on('dom-ready', () => { + w.webContents.setZoomLevel(2.0) + }) + w.loadURL(`data:text/html,${content}`) + }) + }) + }) }) diff --git a/spec/static/main.js b/spec/static/main.js index 1eafd78503da..c36e86aeaecb 100644 --- a/spec/static/main.js +++ b/spec/static/main.js @@ -93,7 +93,8 @@ if (global.isCi) { // Register app as standard scheme. global.standardScheme = 'app' -protocol.registerStandardSchemes([global.standardScheme], { secure: true }) +global.zoomScheme = 'zoom' +protocol.registerStandardSchemes([global.standardScheme, global.zoomScheme], { secure: true }) app.on('window-all-closed', function () { app.quit()