Bug 1382487 - Fix devtools onSelectionChanged API event test case intermittency.
MozReview-Commit-ID: GvljckBZpgN
--- a/browser/components/extensions/test/browser/browser-common.ini
+++ b/browser/components/extensions/test/browser/browser-common.ini
@@ -68,17 +68,16 @@ skip-if = (os == 'win' && !debug) # bug
[browser_ext_currentWindow.js]
[browser_ext_devtools_inspectedWindow.js]
[browser_ext_devtools_inspectedWindow_eval_bindings.js]
[browser_ext_devtools_inspectedWindow_reload.js]
[browser_ext_devtools_network.js]
[browser_ext_devtools_page.js]
[browser_ext_devtools_panel.js]
[browser_ext_devtools_panels_elements.js]
-skip-if = true # bug 1382487
[browser_ext_geckoProfiler_symbolicate.js]
[browser_ext_getViews.js]
[browser_ext_identity_indication.js]
[browser_ext_incognito_views.js]
[browser_ext_incognito_popup.js]
[browser_ext_lastError.js]
[browser_ext_menus.js]
[browser_ext_omnibox.js]
--- a/browser/components/extensions/test/browser/browser_ext_devtools_panels_elements.js
+++ b/browser/components/extensions/test/browser/browser_ext_devtools_panels_elements.js
@@ -6,35 +6,58 @@ XPCOMUtils.defineLazyModuleGetter(this,
"resource://devtools/client/framework/gDevTools.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "devtools",
"resource://devtools/shared/Loader.jsm");
add_task(async function test_devtools_panels_elements_onSelectionChanged() {
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "http://mochi.test:8888/");
function devtools_page() {
- let doTabReload = true;
+ let isReloading = false;
+ let collectedEvalResults = [];
browser.devtools.panels.elements.onSelectionChanged.addListener(async () => {
const [
evalResult, exceptionInfo,
] = await browser.devtools.inspectedWindow.eval("$0 && $0.tagName");
if (exceptionInfo) {
browser.test.fail("Unexpected exceptionInfo on inspectedWindow.eval: " +
JSON.stringify(exceptionInfo));
}
- browser.test.sendMessage("devtools_eval_result", evalResult);
+ collectedEvalResults.push(evalResult);
+
+ // The eval results that are happening during the reload are going to
+ // be retrieved all at once using the "collected_devttols_eval_results:request".
+ if (!isReloading) {
+ browser.test.sendMessage("devtools_eval_result", evalResult);
+ }
+ });
- if (doTabReload) {
- // Force a reload to test that the expected onSelectionChanged events are sent
- // while the page is navigating and once it has been fully reloaded.
- doTabReload = false;
- await browser.devtools.inspectedWindow.eval("window.location.reload();");
+ browser.test.onMessage.addListener(msg => {
+ switch (msg) {
+ case "inspectedWindow_reload": {
+ // Force a reload to test that the expected onSelectionChanged events are sent
+ // while the page is navigating and once it has been fully reloaded.
+ isReloading = true;
+ collectedEvalResults = [];
+ browser.devtools.inspectedWindow.eval("window.location.reload();");
+ break;
+ }
+
+ case "collected_devtools_eval_results:request": {
+ browser.test.sendMessage("collected_devtools_eval_results:reply",
+ collectedEvalResults);
+ break;
+ }
+
+ default: {
+ browser.test.fail(`Received unexpected test.onMesssage: ${msg}`);
+ }
}
});
browser.test.sendMessage("devtools_page_loaded");
}
let extension = ExtensionTestUtils.loadExtension({
manifest: {
@@ -58,33 +81,42 @@ add_task(async function test_devtools_pa
let target = devtools.TargetFactory.forTab(tab);
const toolbox = await gDevTools.showToolbox(target, "webconsole");
info("developer toolbox opened");
await extension.awaitMessage("devtools_page_loaded");
- toolbox.selectTool("inspector");
+ await toolbox.selectTool("inspector");
+
+ const inspector = toolbox.getPanel("inspector");
const evalResult = await extension.awaitMessage("devtools_eval_result");
is(evalResult, "BODY", "Got the expected onSelectionChanged once the inspector is selected");
- const evalResultNavigating = await extension.awaitMessage("devtools_eval_result");
-
- is(evalResultNavigating, undefined, "Got the expected onSelectionChanged once the tab is navigating");
-
- const evalResultNavigated = await extension.awaitMessage("devtools_eval_result");
+ // Reload the inspected tab and wait for the inspector markup view to have been
+ // fully reloaded.
+ const onceMarkupReloaded = inspector.once("markuploaded");
+ extension.sendMessage("inspectedWindow_reload");
+ await onceMarkupReloaded;
- is(evalResultNavigated, undefined, "Got the expected onSelectionChanged once the tab navigated");
+ // Retrieve the first and last collected eval result (the first is related to the
+ // page navigating away, the last one is related to the updated inspector markup view
+ // fully reloaded and the selection updated).
+ extension.sendMessage("collected_devtools_eval_results:request");
+ const collectedEvalResults = await extension.awaitMessage("collected_devtools_eval_results:reply");
+ const evalResultNavigating = collectedEvalResults.shift();
+ const evalResultOnceMarkupReloaded = collectedEvalResults.pop();
- const evalResultReloaded = await extension.awaitMessage("devtools_eval_result");
+ is(evalResultNavigating, undefined,
+ "Got the expected onSelectionChanged once the tab is navigating");
- is(evalResultReloaded, "BODY",
+ is(evalResultOnceMarkupReloaded, "BODY",
"Got the expected onSelectionChanged once the tab has been completely reloaded");
await gDevTools.closeToolbox(target);
await target.destroy();
await extension.unload();