summaryrefslogtreecommitdiffstats
path: root/devtools/client/inspector/markup/test/browser_markup_load_01.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/inspector/markup/test/browser_markup_load_01.js')
-rw-r--r--devtools/client/inspector/markup/test/browser_markup_load_01.js71
1 files changed, 71 insertions, 0 deletions
diff --git a/devtools/client/inspector/markup/test/browser_markup_load_01.js b/devtools/client/inspector/markup/test/browser_markup_load_01.js
new file mode 100644
index 000000000..9c8f4ed2c
--- /dev/null
+++ b/devtools/client/inspector/markup/test/browser_markup_load_01.js
@@ -0,0 +1,71 @@
+/* vim: set ts=2 et sw=2 tw=80: */
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+// Tests that selecting an element with the 'Inspect Element' context
+// menu during a page reload doesn't cause the markup view to become empty.
+// See https://bugzilla.mozilla.org/show_bug.cgi?id=1036324
+
+const server = createTestHTTPServer();
+
+// Register a slow image handler so we can simulate a long time between
+// a reload and the load event firing.
+server.registerContentType("gif", "image/gif");
+server.registerPathHandler("/slow.gif", function (metadata, response) {
+ info("Image has been requested");
+ response.processAsync();
+ setTimeout(() => {
+ info("Image is responding");
+ response.finish();
+ }, 500);
+});
+
+// Test page load events.
+const TEST_URL = "data:text/html," +
+ "<!DOCTYPE html>" +
+ "<head><meta charset='utf-8' /></head>" +
+ "<body>" +
+ "<p>Slow script</p>" +
+ "<img src='http://localhost:" + server.identity.primaryPort + "/slow.gif' /></script>" +
+ "</body>" +
+ "</html>";
+
+add_task(function* () {
+ let {inspector, testActor, tab} = yield openInspectorForURL(TEST_URL);
+ let domContentLoaded = waitForLinkedBrowserEvent(tab, "DOMContentLoaded");
+ let pageLoaded = waitForLinkedBrowserEvent(tab, "load");
+
+ ok(inspector.markup, "There is a markup view");
+
+ // Select an element while the tab is in the middle of a slow reload.
+ testActor.eval("location.reload()");
+ yield domContentLoaded;
+ yield chooseWithInspectElementContextMenu("img", testActor);
+ yield pageLoaded;
+
+ yield inspector.once("markuploaded");
+ yield waitForMultipleChildrenUpdates(inspector);
+
+ ok(inspector.markup, "There is a markup view");
+ is(inspector.markup._elt.children.length, 1, "The markup view is rendering");
+});
+
+function* chooseWithInspectElementContextMenu(selector, testActor) {
+ yield BrowserTestUtils.synthesizeMouseAtCenter(selector, {
+ type: "contextmenu",
+ button: 2
+ }, gBrowser.selectedBrowser);
+
+ yield EventUtils.synthesizeKey("Q", {});
+}
+
+function waitForLinkedBrowserEvent(tab, event) {
+ let def = defer();
+ tab.linkedBrowser.addEventListener(event, function cb() {
+ tab.linkedBrowser.removeEventListener(event, cb, true);
+ def.resolve();
+ }, true);
+ return def.promise;
+}