summaryrefslogtreecommitdiffstats
path: root/devtools/server/tests/unit/test_profiler_close.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/server/tests/unit/test_profiler_close.js')
-rw-r--r--devtools/server/tests/unit/test_profiler_close.js69
1 files changed, 69 insertions, 0 deletions
diff --git a/devtools/server/tests/unit/test_profiler_close.js b/devtools/server/tests/unit/test_profiler_close.js
new file mode 100644
index 000000000..a8b3040fd
--- /dev/null
+++ b/devtools/server/tests/unit/test_profiler_close.js
@@ -0,0 +1,69 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * Tests whether the profiler module is kept active when there are multiple
+ * client consumers and one requests deactivation.
+ */
+
+const Profiler = Cc["@mozilla.org/tools/profiler;1"].getService(Ci.nsIProfiler);
+
+function run_test()
+{
+ get_chrome_actors((client1, form1) => {
+ let actor1 = form1.profilerActor;
+ get_chrome_actors((client2, form2) => {
+ let actor2 = form2.profilerActor;
+ test_close(client1, actor1, client2, actor2, () => {
+ client1.close(() => {
+ client2.close(() => {
+ do_test_finished();
+ });
+ });
+ });
+ });
+ });
+
+ do_test_pending();
+}
+
+function activate_profiler(client, actor, callback)
+{
+ client.request({ to: actor, type: "startProfiler" }, response => {
+ do_check_true(response.started);
+ do_check_true(Profiler.IsActive());
+
+ client.request({ to: actor, type: "isActive" }, response => {
+ do_check_true(response.isActive);
+ callback();
+ });
+ });
+}
+
+function deactivate_profiler(client, actor, callback)
+{
+ client.request({ to: actor, type: "stopProfiler" }, response => {
+ do_check_false(response.started);
+ do_check_true(Profiler.IsActive());
+
+ client.request({ to: actor, type: "isActive" }, response => {
+ do_check_true(response.isActive);
+ callback();
+ });
+ });
+}
+
+function test_close(client1, actor1, client2, actor2, callback)
+{
+ activate_profiler(client1, actor1, () => {
+ activate_profiler(client2, actor2, () => {
+ deactivate_profiler(client1, actor1, () => {
+ deactivate_profiler(client2, actor2, () => {
+ callback();
+ });
+ });
+ });
+ });
+}