summaryrefslogtreecommitdiffstats
path: root/devtools/client/debugger/test/mochitest/browser_dbg-chrome-create.js
blob: 9f4c38d71f9eb48aa084e0001bb7d630c64ee04f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/* 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/>. */


/**
 * Tests that a chrome debugger can be created in a new process.
 */

// There are shutdown issues for which multiple rejections are left uncaught.
// See bug 1018184 for resolving these issues.
PromiseTestUtils.allowMatchingRejectionsGlobally(/File closed/);
PromiseTestUtils.allowMatchingRejectionsGlobally(/NS_ERROR_FAILURE/);

requestLongerTimeout(5);

const { BrowserToolboxLauncher } = ChromeUtils.import("resource://devtools/client/framework/browser-toolbox/Launcher.jsm");
let gProcess = undefined;

add_task(async function() {
  // Windows XP and 8.1 test machines are terribly slow at this test.
  await pushPref("devtools.chrome.enabled", true);
  await pushPref("devtools.debugger.remote-enabled", true);

  gProcess = await initChromeDebugger();

  ok(
    gProcess._dbgProcess,
    "The remote debugger process wasn't created properly!"
  );
  ok(
    gProcess._dbgProcess.exitCode == null,
    "The remote debugger process isn't running!"
  );
  is(
    typeof gProcess._dbgProcess.pid,
    "number",
    "The remote debugger process doesn't have a pid (?!)"
  );

  info("process location: " + gProcess._dbgProcess.location);
  info("process pid: " + gProcess._dbgProcess.pid);
  info("process name: " + gProcess._dbgProcess.processName);
  info("process sig: " + gProcess._dbgProcess.processSignature);

  ok(
    gProcess._dbgProfilePath,
    "The remote debugger profile wasn't created properly!"
  );

  is(
    gProcess._dbgProfilePath,
    OS.Path.join(OS.Constants.Path.profileDir, "chrome_debugger_profile"),
    "The remote debugger profile isn't where we expect it!"
  );

  info("profile path: " + gProcess._dbgProfilePath);

  await gProcess.close();
});

function initChromeDebugger() {
  info("Initializing a chrome debugger process.");
  return new Promise(resolve => {
    BrowserToolboxLauncher.init(onClose, _process => {
      info("Browser toolbox process started successfully.");
      resolve(_process);
    });
  });
}

function onClose() {
  is(
    gProcess._dbgProcess.exitCode,
    Services.appinfo.OS == "WINNT" ? -9 : -15,
    "The remote debugger process didn't die cleanly."
  );

  info("process exit value: " + gProcess._dbgProcess.exitCode);

  info("profile path: " + gProcess._dbgProfilePath);

  finish();
}

registerCleanupFunction(function() {
  gProcess = null;
});