зеркало из https://github.com/mozilla/gecko-dev.git
Backed out 4 changesets (bug 1555511) for devtools failures at browser_viewport_resizing_minimum_scale.js CLOSED TREE
Backed out changeset 80b9b4eb8305 (bug 1555511) Backed out changeset d9ce18a4d7cd (bug 1555511) Backed out changeset 5e9e587d0622 (bug 1555511) Backed out changeset 24e136f27469 (bug 1555511)
This commit is contained in:
Родитель
47274faae8
Коммит
09cd19a7b2
|
@ -81,7 +81,6 @@ fail-if = true # Bug 1547783
|
|||
[browser_viewport_basics.js]
|
||||
[browser_viewport_resizing_fixed_width.js]
|
||||
[browser_viewport_resizing_fixed_width_and_zoom.js]
|
||||
[browser_viewport_resizing_minimum_scale.js]
|
||||
[browser_viewport_resizing_scrollbar.js]
|
||||
fail-if = true # Bug 1547101
|
||||
[browser_window_close.js]
|
||||
|
|
|
@ -5,6 +5,36 @@
|
|||
|
||||
// Test viewport resizing, with and without meta viewport support.
|
||||
|
||||
// We call this to switch between on/off support for meta viewports.
|
||||
async function setTouchAndMetaViewportSupport(ui, value) {
|
||||
const reloadNeeded = await ui.updateTouchSimulation(value);
|
||||
if (reloadNeeded) {
|
||||
info("Reload is needed -- waiting for it.");
|
||||
const reload = waitForViewportLoad(ui);
|
||||
const browser = ui.getViewportBrowser();
|
||||
browser.reload();
|
||||
await reload;
|
||||
}
|
||||
}
|
||||
|
||||
// This function check that zoom, layout viewport width and height
|
||||
// are all as expected.
|
||||
async function testViewportZoomWidthAndHeight(message, ui, zoom, width, height) {
|
||||
const resolution = await spawnViewportTask(ui, {}, function() {
|
||||
return content.windowUtils.getResolution();
|
||||
});
|
||||
is(resolution, zoom, message + " should have expected zoom.");
|
||||
|
||||
const layoutSize = await spawnViewportTask(ui, {}, function() {
|
||||
return {
|
||||
width: content.screen.width,
|
||||
height: content.screen.height,
|
||||
};
|
||||
});
|
||||
is(layoutSize.width, width, message + " should have expected layout width.");
|
||||
is(layoutSize.height, height, message + " should have expected layout height.");
|
||||
}
|
||||
|
||||
const TEST_URL = "data:text/html;charset=utf-8," +
|
||||
"<head><meta name=\"viewport\" content=\"width=300\"/></head>" +
|
||||
"<body>meta viewport width 300</body>";
|
||||
|
|
|
@ -5,6 +5,36 @@
|
|||
|
||||
// Test viewport resizing, with and without meta viewport support.
|
||||
|
||||
// We call this to switch between on/off support for meta viewports.
|
||||
async function setTouchAndMetaViewportSupport(ui, value) {
|
||||
const reloadNeeded = await ui.updateTouchSimulation(value);
|
||||
if (reloadNeeded) {
|
||||
info("Reload is needed -- waiting for it.");
|
||||
const reload = waitForViewportLoad(ui);
|
||||
const browser = ui.getViewportBrowser();
|
||||
browser.reload();
|
||||
await reload;
|
||||
}
|
||||
}
|
||||
|
||||
// This function check that zoom, layout viewport width and height
|
||||
// are all as expected.
|
||||
async function testViewportZoomWidthAndHeight(message, ui, zoom, width, height) {
|
||||
const resolution = await spawnViewportTask(ui, {}, function() {
|
||||
return content.windowUtils.getResolution();
|
||||
});
|
||||
is(resolution, zoom, message + " should have expected zoom.");
|
||||
|
||||
const layoutSize = await spawnViewportTask(ui, {}, function() {
|
||||
return {
|
||||
width: content.screen.width,
|
||||
height: content.screen.height,
|
||||
};
|
||||
});
|
||||
is(layoutSize.width, width, message + " should have expected layout width.");
|
||||
is(layoutSize.height, height, message + " should have expected layout height.");
|
||||
}
|
||||
|
||||
const TEST_URL = "data:text/html;charset=utf-8," +
|
||||
"<head><meta name=\"viewport\" content=\"width=device-width, " +
|
||||
"initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0\"></head>" +
|
||||
|
|
|
@ -1,73 +0,0 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
// Test viewport resizing, with and without meta viewport support.
|
||||
|
||||
const TEST_URL = "data:text/html;charset=utf-8," +
|
||||
"<head><meta name=\"viewport\" content=\"initial-scale=1.0, " +
|
||||
"minimum-scale=1.0, width=device-width\"></head>" +
|
||||
"<div style=\"width:100%;background-color:green\">test</div>" +
|
||||
"</body>";
|
||||
addRDMTask(TEST_URL, async function({ ui, manager }) {
|
||||
// Turn on the pref that allows meta viewport support.
|
||||
await SpecialPowers.pushPrefEnv({
|
||||
set: [["devtools.responsive.metaViewport.enabled", true]],
|
||||
});
|
||||
|
||||
const store = ui.toolWindow.store;
|
||||
|
||||
// Wait until the viewport has been added.
|
||||
await waitUntilState(store, state => state.viewports.length == 1);
|
||||
|
||||
info("--- Starting viewport test output ---");
|
||||
|
||||
// We're going to take a 300,600 viewport (before) and resize it
|
||||
// to 600,300 (after) and then resize it back. At the before and
|
||||
// after points, we'll measure zoom and the layout viewport width
|
||||
// and height.
|
||||
const expected = [
|
||||
{
|
||||
before: {
|
||||
zoom: 1.0,
|
||||
width: 300,
|
||||
height: 600,
|
||||
},
|
||||
after: {
|
||||
zoom: 1.0,
|
||||
width: 600,
|
||||
height: 300,
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
for (const e of expected) {
|
||||
const b = e.before;
|
||||
const a = e.after;
|
||||
|
||||
const message = "Meta Viewport ON";
|
||||
|
||||
// Ensure meta viewport is set.
|
||||
info(message + " setting meta viewport support.");
|
||||
await setTouchAndMetaViewportSupport(ui, true);
|
||||
|
||||
// Get to the initial size and check values.
|
||||
await setViewportSize(ui, manager, 300, 600);
|
||||
await testViewportZoomWidthAndHeight(
|
||||
message + " before resize",
|
||||
ui, b.zoom, b.width, b.height);
|
||||
|
||||
// Move to the smaller size.
|
||||
await setViewportSize(ui, manager, 600, 300);
|
||||
await testViewportZoomWidthAndHeight(
|
||||
message + " after resize",
|
||||
ui, a.zoom, a.width, a.height);
|
||||
|
||||
// Go back to the initial size and check again.
|
||||
await setViewportSize(ui, manager, 300, 600);
|
||||
await testViewportZoomWidthAndHeight(
|
||||
message + " return to initial size",
|
||||
ui, b.zoom, b.width, b.height);
|
||||
}
|
||||
});
|
|
@ -9,6 +9,18 @@
|
|||
Services.scriptloader.loadSubScript(
|
||||
"chrome://mochikit/content/tests/SimpleTest/WindowSnapshot.js", this);
|
||||
|
||||
// We call this to switch between on/off support for meta viewports.
|
||||
async function setTouchAndMetaViewportSupport(ui, value) {
|
||||
const reloadNeeded = await ui.updateTouchSimulation(value);
|
||||
if (reloadNeeded) {
|
||||
info("Reload is needed -- waiting for it.");
|
||||
const reload = waitForViewportLoad(ui);
|
||||
const browser = ui.getViewportBrowser();
|
||||
browser.reload();
|
||||
await reload;
|
||||
}
|
||||
}
|
||||
|
||||
// The quest for a TEST_ROOT: we have to choose a way of addressing the RDM document
|
||||
// such that two things can happen:
|
||||
// 1) addRDMTask can load it.
|
||||
|
|
|
@ -565,42 +565,3 @@ function rotateViewport(ui) {
|
|||
const rotateButton = document.getElementById("rotate-button");
|
||||
rotateButton.click();
|
||||
}
|
||||
|
||||
// Call this to switch between on/off support for meta viewports.
|
||||
async function setTouchAndMetaViewportSupport(ui, value) {
|
||||
const reloadNeeded = await ui.updateTouchSimulation(value);
|
||||
if (reloadNeeded) {
|
||||
info("Reload is needed -- waiting for it.");
|
||||
const reload = waitForViewportLoad(ui);
|
||||
const browser = ui.getViewportBrowser();
|
||||
browser.reload();
|
||||
await reload;
|
||||
}
|
||||
return reloadNeeded;
|
||||
}
|
||||
|
||||
// This function checks that zoom, layout viewport width and height
|
||||
// are all as expected.
|
||||
async function testViewportZoomWidthAndHeight(message, ui, zoom, width, height) {
|
||||
if (typeof zoom !== "undefined") {
|
||||
const resolution = await spawnViewportTask(ui, {}, function() {
|
||||
return content.windowUtils.getResolution();
|
||||
});
|
||||
is(resolution, zoom, message + " should have expected zoom.");
|
||||
}
|
||||
|
||||
if (typeof width !== "undefined" || typeof height !== "undefined") {
|
||||
const layoutSize = await spawnViewportTask(ui, {}, function() {
|
||||
return {
|
||||
width: content.screen.width,
|
||||
height: content.screen.height,
|
||||
};
|
||||
});
|
||||
if (typeof width !== "undefined") {
|
||||
is(layoutSize.width, width, message + " should have expected layout width.");
|
||||
}
|
||||
if (typeof height !== "undefined") {
|
||||
is(layoutSize.height, height, message + " should have expected layout height.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -184,13 +184,13 @@ CSSToScreenScale MobileViewportManager::ClampZoom(
|
|||
CSSToScreenScale MobileViewportManager::ScaleZoomWithDisplayWidth(
|
||||
const CSSToScreenScale& aZoom, const float& aDisplayWidthChangeRatio,
|
||||
const CSSSize& aNewViewport, const CSSSize& aOldViewport) {
|
||||
float inverseCssWidthChangeRatio =
|
||||
(aNewViewport.width == 0) ? 1.0f
|
||||
: aOldViewport.width / aNewViewport.width;
|
||||
CSSToScreenScale newZoom(aZoom.scale * aDisplayWidthChangeRatio *
|
||||
inverseCssWidthChangeRatio);
|
||||
MVM_LOG("%p: Old zoom was %f, changed by %f * %f to %f\n", this, aZoom.scale,
|
||||
aDisplayWidthChangeRatio, inverseCssWidthChangeRatio, newZoom.scale);
|
||||
float cssViewportChangeRatio = (aOldViewport.width == 0)
|
||||
? 1.0f
|
||||
: aNewViewport.width / aOldViewport.width;
|
||||
CSSToScreenScale newZoom(aZoom.scale * aDisplayWidthChangeRatio /
|
||||
cssViewportChangeRatio);
|
||||
MVM_LOG("%p: Old zoom was %f, changed by %f/%f to %f\n", this, aZoom.scale,
|
||||
aDisplayWidthChangeRatio, cssViewportChangeRatio, newZoom.scale);
|
||||
return newZoom;
|
||||
}
|
||||
|
||||
|
@ -295,14 +295,9 @@ void MobileViewportManager::UpdateResolution(
|
|||
// result of clamping to either the minimum or maximum zoom level
|
||||
// allowed by the viewport. If we naively scale the zoom level with
|
||||
// the change in the display width, we might be scaling one of these
|
||||
// previously clamped values. What we really want to do is to make
|
||||
// scaling of the zoom aware of these minimum and maximum clamping
|
||||
// points for the existing content size, so that we keep display
|
||||
// width changes completely reversible.
|
||||
|
||||
// We don't consider here if we are scaling to a zoom value outside
|
||||
// of our viewport limits, because we'll clamp to the viewport limits
|
||||
// as a final step.
|
||||
// clamped values. What we really want to do is to make scaling of the
|
||||
// zoom aware of these minimum and maximum clamping points, so that we
|
||||
// keep display width changes completely reversible.
|
||||
|
||||
// Because of the behavior of ShrinkToDisplaySizeIfNeeded, we are
|
||||
// choosing zoom clamping points based on the content size of the
|
||||
|
@ -330,7 +325,8 @@ void MobileViewportManager::UpdateResolution(
|
|||
float c(oldDisplaySize.width);
|
||||
float d(newDisplaySize.width);
|
||||
|
||||
// The oldDisplaySize value is in one of three "zones":
|
||||
// For both oldDisplaySize and aDisplaySize, the values are in one of
|
||||
// three "zones":
|
||||
// 1) Less than or equal to minZoomDisplaySize.
|
||||
// 2) Between minZoomDisplaySize and maxZoomDisplaySize.
|
||||
// 3) Greater than or equal to maxZoomDisplaySize.
|
||||
|
@ -338,24 +334,26 @@ void MobileViewportManager::UpdateResolution(
|
|||
// Depending on which zone each are in, the adjusted ratio is shown in
|
||||
// the table below (using the a-b-c-d coding from above):
|
||||
|
||||
// c +---+
|
||||
// | d |
|
||||
// 1 | a |
|
||||
// +---+
|
||||
// | d |
|
||||
// 2 | c |
|
||||
// +---+
|
||||
// | d |
|
||||
// 3 | b |
|
||||
// +---+
|
||||
// d | 1 | 2 | 3 |
|
||||
// c +---+---+---+
|
||||
// | a | d | b |
|
||||
// 1 | a | a | a |
|
||||
// +---+---+---+
|
||||
// | a | d | b |
|
||||
// 2 | c | c | c |
|
||||
// +---+---+---+
|
||||
// | a | d | b |
|
||||
// 3 | b | b | b |
|
||||
// +---+---+---+
|
||||
|
||||
// Conveniently, the denominator is c clamped to a..b.
|
||||
// Conveniently, the numerator is just d clamped to a..b, and the
|
||||
// denominator is c clamped to a..b.
|
||||
float numerator = clamped(d, a, b);
|
||||
float denominator = clamped(c, a, b);
|
||||
|
||||
float adjustedRatio = d / denominator;
|
||||
CSSToScreenScale adjustedZoom = ScaleZoomWithDisplayWidth(
|
||||
zoom, adjustedRatio, viewportSize, mMobileViewportSize);
|
||||
newZoom = Some(ClampZoom(adjustedZoom, aViewportInfo));
|
||||
float adjustedRatio = numerator / denominator;
|
||||
newZoom = Some(ScaleZoomWithDisplayWidth(
|
||||
zoom, adjustedRatio, viewportSize, mMobileViewportSize));
|
||||
}
|
||||
}
|
||||
} else { // aType == UpdateType::ContentSize
|
||||
|
|
Загрузка…
Ссылка в новой задаче