browser(firefox): resize window when changing viewport (#2861)
This commit is contained in:
parent
64f57216e2
commit
baaa65492b
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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');
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue