From 642c0dc0c63eb2fe36a2f60786fc589b317104aa Mon Sep 17 00:00:00 2001 From: yan Date: Thu, 23 Mar 2017 05:21:37 +0000 Subject: [PATCH] Fix zoom level on browser restore and remove deprecated zoom level site setting. fix https://github.com/brave/browser-laptop/issues/7832 Test Plan: 1. launch clean instance of brave 2. go to example.com and change the zoom level 3. close brave 4. reopen brave 5. example.com should load with the previous zoom setting --- docs/state.md | 2 +- js/components/frame.js | 18 ++++++++++++------ js/lib/zoom.js | 5 +++++ js/state/frameStateUtil.js | 1 - js/state/syncUtil.js | 2 +- test/unit/lib/zoomTest.js | 13 ++++++++++++- 6 files changed, 31 insertions(+), 10 deletions(-) diff --git a/docs/state.md b/docs/state.md index e8f67742a9..0df664f736 100644 --- a/docs/state.md +++ b/docs/state.md @@ -262,7 +262,7 @@ AppStore savePasswords: boolean, // only false or undefined/null shieldsUp: boolean, widevine: (number|boolean), // false = block widevine, 0 = allow once, 1 = allow always - zoomLevel: number + zoomLevel: number // deprecated } }, sync: { diff --git a/js/components/frame.js b/js/components/frame.js index 0506c365a5..49e7e2ce9a 100644 --- a/js/components/frame.js +++ b/js/components/frame.js @@ -13,6 +13,7 @@ const cx = require('../lib/classSet') const siteUtil = require('../state/siteUtil') const FrameStateUtil = require('../state/frameStateUtil') const UrlUtil = require('../lib/urlutil') +const {getZoomLevel} = require('../lib/zoom') const messages = require('../constants/messages') const contextMenus = require('../contextMenus') const ipc = require('electron').ipcRenderer @@ -336,7 +337,18 @@ class Frame extends ImmutableComponent { this.runOnDomReady() delete this.runOnDomReady } + let zoomCallback = (e) => { + if (!e.isMainFrame) { + return + } + this.webview.removeEventListener(e.type, zoomCallback) + const zoomPercentage = this.frame && this.frame.get('lastZoomPercentage') + if (zoomPercentage !== this.webview.getZoomPercent()) { + this.webview.setZoomLevel(getZoomLevel(zoomPercentage)) + } + } this.webview.addEventListener('did-attach', eventCallback) + this.webview.addEventListener('load-commit', zoomCallback) } webviewAdded = true @@ -368,12 +380,6 @@ class Frame extends ImmutableComponent { this.updateWebview(this.onPropsChanged) } - get zoomLevel () { - const zoom = this.props.frameSiteSettings && this.props.frameSiteSettings.get('zoomLevel') - appActions.removeSiteSetting(this.origin, 'zoomLevel', this.props.isPrivate) - return zoom - } - zoomIn () { if (this.webview) { this.webview.zoomIn() diff --git a/js/lib/zoom.js b/js/lib/zoom.js index 1e5e5d4461..7fbbce9626 100644 --- a/js/lib/zoom.js +++ b/js/lib/zoom.js @@ -8,6 +8,11 @@ const {zoom} = require('../constants/config') module.exports.getZoomValuePercentage = (zoomLevel) => 100 + (20 * zoomLevel) +// Convert zoom percentage to zoom level +module.exports.getZoomLevel = (percentage) => { + return (percentage - 100) / 20 +} + module.exports.getNextZoomLevel = (currentZoom, zoomIn) => { const zoomLevels = zoom.zoomLevels // First find the closet value to what we allow diff --git a/js/state/frameStateUtil.js b/js/state/frameStateUtil.js index e79553fd04..0ee0865886 100644 --- a/js/state/frameStateUtil.js +++ b/js/state/frameStateUtil.js @@ -343,7 +343,6 @@ function addFrame (windowState, tabs, frameOpts, newKey, partitionNumber, active } const frame = Immutable.fromJS(Object.assign({ - zoomLevel: config.zoom.defaultValue, audioMuted: false, // frame is muted location, aboutDetails: undefined, diff --git a/js/state/syncUtil.js b/js/state/syncUtil.js index 9c0bd8d57d..20aa9173b1 100644 --- a/js/state/syncUtil.js +++ b/js/state/syncUtil.js @@ -29,7 +29,7 @@ module.exports.CATEGORY_MAP = CATEGORY_MAP const siteSettingDefaults = { hostPattern: '', - zoomLevel: 0, + zoomLevel: 0, // deprecated shieldsUp: true, adControl: 1, cookieControl: 0, diff --git a/test/unit/lib/zoomTest.js b/test/unit/lib/zoomTest.js index 74a4e75b77..4e778c7bf4 100644 --- a/test/unit/lib/zoomTest.js +++ b/test/unit/lib/zoomTest.js @@ -1,6 +1,6 @@ /* global describe, it */ -const {getZoomValuePercentage, getNextZoomLevel} = require('../../../js/lib/zoom') +const {getZoomValuePercentage, getZoomLevel, getNextZoomLevel} = require('../../../js/lib/zoom') const {zoom} = require('../../../js/constants/config') const assert = require('assert') @@ -16,6 +16,17 @@ describe('zoom', function () { assert.equal(getZoomValuePercentage(-3.75), 25) }) }) + describe('getZoomLevel', function () { + it('formats 100 to 0', function * () { + assert.equal(getZoomLevel(100), 0) + }) + it('formats positive value', function * () { + assert.equal(getZoomLevel(120), 1) + }) + it('formats negative value', function * () { + assert.equal(getZoomLevel(25), -3.75) + }) + }) describe('getNextZoomLevel', function () { it('zoomOut respects minimum', function * () { assert.equal(getNextZoomLevel(-200, false), zoom.zoomLevels[0])