/* 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 frame selection switching at toolbox level
// when using the inspector
const FrameURL = "data:text/html;charset=UTF-8," +
encodeURI("
frame
");
const URL = "data:text/html;charset=UTF-8," +
encodeURI('top
');
add_task(function* () {
Services.prefs.setBoolPref("devtools.command-button-frames.enabled", true);
let {inspector, toolbox, testActor} = yield openInspectorForURL(URL);
// Verify we are on the top level document
ok((yield testActor.hasNode("#top")),
"We have the test node on the top level document");
assertMarkupViewIsLoaded(inspector);
// Verify that the frame map button is empty at the moment.
let btn = toolbox.doc.getElementById("command-button-frames");
ok(!btn.firstChild, "The frame list button doesn't have any children");
// Open frame menu and wait till it's available on the screen.
let menu = toolbox.showFramesMenu({target: btn});
yield once(menu, "open");
// Verify that the menu is popuplated.
let frames = menu.items.slice();
is(frames.length, 2, "We have both frames in the menu");
frames.sort(function (a, b) {
return a.label.localeCompare(b.label);
});
is(frames[0].label, FrameURL, "Got top level document in the list");
is(frames[1].label, URL, "Got iframe document in the list");
// Listen to will-navigate to check if the view is empty
let willNavigate = toolbox.target.once("will-navigate").then(() => {
info("Navigation to the iframe has started, the inspector should be empty");
assertMarkupViewIsEmpty(inspector);
});
// Only select the iframe after we are able to select an element from the top
// level document.
let newRoot = inspector.once("new-root");
yield selectNode("#top", inspector);
info("Select the iframe");
frames[0].click();
yield willNavigate;
yield newRoot;
info("Navigation to the iframe is done, the inspector should be back up");
// Verify we are on page one
ok(!(yield testActor.hasNode("iframe")),
"We not longer have access to the top frame elements");
ok((yield testActor.hasNode("#frame")),
"But now have direct access to the iframe elements");
// On page 2 load, verify we have the right content
assertMarkupViewIsLoaded(inspector);
yield selectNode("#frame", inspector);
Services.prefs.clearUserPref("devtools.command-button-frames.enabled");
});
function assertMarkupViewIsLoaded(inspector) {
let markupViewBox = inspector.panelDoc.getElementById("markup-box");
is(markupViewBox.childNodes.length, 1, "The markup-view is loaded");
}
function assertMarkupViewIsEmpty(inspector) {
let markupViewBox = inspector.panelDoc.getElementById("markup-box");
is(markupViewBox.childNodes.length, 0, "The markup-view is unloaded");
}