browser(firefox): resize window when changing viewport (#2861)

This commit is contained in:
Yury Semikhatsky 2020-07-07 14:04:07 -07:00 committed by GitHub
parent 64f57216e2
commit baaa65492b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 11 deletions

View file

@ -1,2 +1,2 @@
1124 1125
Changed: yurys@chromium.org Mon Jul 6 17:16:56 PDT 2020 Changed: yurys@chromium.org Tue Jul 7 10:43:01 PDT 2020

View file

@ -146,8 +146,9 @@ class TargetRegistry {
let tab; let tab;
let gBrowser; let gBrowser;
const windowsIt = Services.wm.getEnumerator('navigator:browser'); const windowsIt = Services.wm.getEnumerator('navigator:browser');
let window;
while (windowsIt.hasMoreElements()) { while (windowsIt.hasMoreElements()) {
const window = windowsIt.getNext(); window = windowsIt.getNext();
// gBrowser is always created before tabs. If gBrowser is not // gBrowser is always created before tabs. If gBrowser is not
// initialized yet the browser belongs to another window. // initialized yet the browser belongs to another window.
if (!window.gBrowser) if (!window.gBrowser)
@ -172,7 +173,7 @@ class TargetRegistry {
openerTarget = this._browserToTarget.get(tab.openerTab.linkedBrowser); openerTarget = this._browserToTarget.get(tab.openerTab.linkedBrowser);
} }
const browserContext = this._userContextIdToBrowserContext.get(userContextId); const browserContext = this._userContextIdToBrowserContext.get(userContextId);
const target = new PageTarget(this, gBrowser, tab, linkedBrowser, browserContext, openerTarget); const target = new PageTarget(this, window, gBrowser, tab, linkedBrowser, browserContext, openerTarget);
const sessions = []; const sessions = [];
const readyData = { sessions, target }; const readyData = { sessions, target };
@ -187,12 +188,12 @@ class TargetRegistry {
}, },
}); });
const onTabOpenListener = event => { const onTabOpenListener = (window, event) => {
const tab = event.target; const tab = event.target;
const userContextId = tab.userContextId; const userContextId = tab.userContextId;
const browserContext = this._userContextIdToBrowserContext.get(userContextId); const browserContext = this._userContextIdToBrowserContext.get(userContextId);
if (browserContext && browserContext.defaultViewportSize) if (browserContext && browserContext.defaultViewportSize)
setViewportSizeForBrowser(browserContext.defaultViewportSize, tab.linkedBrowser); setViewportSizeForBrowser(browserContext.defaultViewportSize, tab.linkedBrowser, window);
}; };
const onTabCloseListener = event => { const onTabCloseListener = event => {
@ -220,7 +221,7 @@ class TargetRegistry {
}); });
if (!domWindow.gBrowser) if (!domWindow.gBrowser)
return; return;
domWindow.gBrowser.tabContainer.addEventListener('TabOpen', onTabOpenListener); domWindow.gBrowser.tabContainer.addEventListener('TabOpen', event => onTabOpenListener(domWindow, event));
domWindow.gBrowser.tabContainer.addEventListener('TabClose', onTabCloseListener); domWindow.gBrowser.tabContainer.addEventListener('TabClose', onTabCloseListener);
}, },
onCloseWindow: window => { onCloseWindow: window => {
@ -304,7 +305,7 @@ class TargetRegistry {
}); });
}); });
if (browserContext && browserContext.defaultViewportSize) if (browserContext && browserContext.defaultViewportSize)
setViewportSizeForBrowser(browserContext.defaultViewportSize, browser); setViewportSizeForBrowser(browserContext.defaultViewportSize, browser, window);
browser.focus(); browser.focus();
if (browserContext.settings.timezoneId) { if (browserContext.settings.timezoneId) {
if (await target.hasFailedToOverrideTimezone()) if (await target.hasFailedToOverrideTimezone())
@ -332,11 +333,12 @@ class TargetRegistry {
} }
class PageTarget { class PageTarget {
constructor(registry, gBrowser, tab, linkedBrowser, browserContext, opener) { constructor(registry, win, gBrowser, tab, linkedBrowser, browserContext, opener) {
EventEmitter.decorate(this); EventEmitter.decorate(this);
this._targetId = helper.generateId(); this._targetId = helper.generateId();
this._registry = registry; this._registry = registry;
this._window = win;
this._gBrowser = gBrowser; this._gBrowser = gBrowser;
this._tab = tab; this._tab = tab;
this._linkedBrowser = linkedBrowser; this._linkedBrowser = linkedBrowser;
@ -374,7 +376,7 @@ class PageTarget {
async setViewportSize(viewportSize) { async setViewportSize(viewportSize) {
this._viewportSize = viewportSize; this._viewportSize = viewportSize;
const actualSize = setViewportSizeForBrowser(viewportSize, this._linkedBrowser); const actualSize = setViewportSizeForBrowser(viewportSize, this._linkedBrowser, this._window);
await this._channel.connect('').send('awaitViewportDimensions', { await this._channel.connect('').send('awaitViewportDimensions', {
width: actualSize.width, width: actualSize.width,
height: actualSize.height height: actualSize.height
@ -690,9 +692,11 @@ async function waitForWindowReady(window) {
} }
} }
function setViewportSizeForBrowser(viewportSize, browser) { function setViewportSizeForBrowser(viewportSize, browser, window) {
if (viewportSize) { if (viewportSize) {
const {width, height} = viewportSize; const {width, height} = viewportSize;
const rect = browser.getBoundingClientRect();
window.resizeBy(width - rect.width, height - rect.height);
browser.style.setProperty('min-width', width + 'px'); browser.style.setProperty('min-width', width + 'px');
browser.style.setProperty('min-height', height + 'px'); browser.style.setProperty('min-height', height + 'px');
browser.style.setProperty('max-width', width + 'px'); browser.style.setProperty('max-width', width + 'px');