summaryrefslogtreecommitdiffstats
path: root/devtools/client/webconsole/test/browser/browser_console_eager_eval_resolve.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/webconsole/test/browser/browser_console_eager_eval_resolve.js')
-rw-r--r--devtools/client/webconsole/test/browser/browser_console_eager_eval_resolve.js64
1 files changed, 64 insertions, 0 deletions
diff --git a/devtools/client/webconsole/test/browser/browser_console_eager_eval_resolve.js b/devtools/client/webconsole/test/browser/browser_console_eager_eval_resolve.js
new file mode 100644
index 0000000000..cc2daa33ea
--- /dev/null
+++ b/devtools/client/webconsole/test/browser/browser_console_eager_eval_resolve.js
@@ -0,0 +1,64 @@
+/* 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";
+
+// Check evaluating eager-evaluation values.
+const TEST_URI = "data:text/html;charset=utf8,<!DOCTYPE html>";
+
+add_task(async function () {
+ await addTab(TEST_URI);
+
+ await pushPref("devtools.chrome.enabled", true);
+
+ info("Open the Browser Console");
+ const hud = await BrowserConsoleManager.toggleBrowserConsole();
+
+ await executeResolveHookWithSideEffect(hud);
+});
+
+async function executeResolveHookWithSideEffect(hud) {
+ // Services.droppedLinkHandler is implemented with resolve hook, which imports
+ // ContentAreaDropListener.sys.mjs.
+ //
+ // In order to test the resolve hook behavior, ensure the module is not yet
+ // loaded, which ensures the property is not yet resolved.
+ //
+ // NOTE: This test is not compatible with verify mode, given it depends on the
+ // initial state of the Services object and the module.
+ is(
+ Cu.isESModuleLoaded(
+ "resource://gre/modules/ContentAreaDropListener.sys.mjs"
+ ),
+ false
+ );
+
+ setInputValue(hud, `Services.droppedLinkHandler`);
+
+ await wait(500);
+ // Eager evaluation should fail, due to the side effect in the resolve hook.
+ await waitForEagerEvaluationResult(hud, "");
+
+ setInputValue(hud, "");
+ await wait(500);
+
+ // The property should be resolved when evaluating after the eager evaluation.
+ await executeAndWaitForResultMessage(
+ hud,
+ `Services.droppedLinkHandler;`,
+ "XPCWrappedNative_NoHelper"
+ );
+
+ is(
+ Cu.isESModuleLoaded(
+ "resource://gre/modules/ContentAreaDropListener.sys.mjs"
+ ),
+ true
+ );
+
+ // Eager evaluation should work after the property is resolved.
+ setInputValue(hud, `Services.droppedLinkHandler`);
+ await wait(500);
+ await waitForEagerEvaluationResult(hud, /XPCWrappedNative_NoHelper/);
+}