/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
// Test that the inspector splitter is properly initialized in horizontal mode if the
// inspector starts in portrait mode.
add_task(function* () {
let { inspector, toolbox } = yield openInspectorForURL(
"data:text/html;charset=utf-8,
foo
bar", "window");
let hostWindow = toolbox.win.parent;
let originalWidth = hostWindow.outerWidth;
let originalHeight = hostWindow.outerHeight;
let splitter = inspector.panelDoc.querySelector(".inspector-sidebar-splitter");
// If the inspector is not already in landscape mode.
if (!splitter.classList.contains("vert")) {
info("Resize toolbox window to force inspector to landscape mode");
let onClassnameMutation = waitForClassMutation(splitter);
hostWindow.resizeTo(800, 500);
yield onClassnameMutation;
ok(splitter.classList.contains("vert"), "Splitter is in vertical mode");
}
info("Resize toolbox window to force inspector to portrait mode");
let onClassnameMutation = waitForClassMutation(splitter);
hostWindow.resizeTo(500, 500);
yield onClassnameMutation;
ok(splitter.classList.contains("horz"), "Splitter is in horizontal mode");
info("Close the inspector");
yield gDevTools.closeToolbox(toolbox.target);
info("Reopen inspector");
({ inspector, toolbox } = yield openInspector("window"));
// Devtools window should still be 500px * 500px, inspector should still be in portrait.
splitter = inspector.panelDoc.querySelector(".inspector-sidebar-splitter");
ok(splitter.classList.contains("horz"), "Splitter is in horizontal mode");
info("Restore original window size");
toolbox.win.parent.resizeTo(originalWidth, originalHeight);
});
/**
* Helper waiting for a class attribute mutation on the provided target. Returns a
* promise.
*
* @param {Node} target
* Node to observe
* @return {Promise} promise that will resolve upon receiving a mutation for the class
* attribute on the target.
*/
function waitForClassMutation(target) {
return new Promise(resolve => {
let observer = new MutationObserver((mutations) => {
for (let mutation of mutations) {
if (mutation.attributeName === "class") {
observer.disconnect();
resolve();
return;
}
}
});
observer.observe(target, { attributes: true });
});
}
registerCleanupFunction(function () {
// Restore the host type for other tests.
Services.prefs.clearUserPref("devtools.toolbox.host");
});