browser_dbg_chrome-debugging.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
  2. /* Any copyright is dedicated to the Public Domain.
  3. * http://creativecommons.org/publicdomain/zero/1.0/ */
  4. /**
  5. * Tests that chrome debugging works.
  6. */
  7. const TAB_URL = EXAMPLE_URL + "doc_inline-debugger-statement.html";
  8. var gClient, gThreadClient;
  9. var gAttached = promise.defer();
  10. var gNewGlobal = promise.defer();
  11. var gNewChromeSource = promise.defer();
  12. var { DevToolsLoader } = Cu.import("resource://devtools/shared/Loader.jsm", {});
  13. var customLoader = new DevToolsLoader();
  14. customLoader.invisibleToDebugger = true;
  15. var { DebuggerServer } = customLoader.require("devtools/server/main");
  16. function test() {
  17. if (!DebuggerServer.initialized) {
  18. DebuggerServer.init();
  19. DebuggerServer.addBrowserActors();
  20. }
  21. DebuggerServer.allowChromeProcess = true;
  22. let transport = DebuggerServer.connectPipe();
  23. gClient = new DebuggerClient(transport);
  24. gClient.connect().then(([aType, aTraits]) => {
  25. is(aType, "browser",
  26. "Root actor should identify itself as a browser.");
  27. promise.all([gAttached.promise, gNewGlobal.promise, gNewChromeSource.promise])
  28. .then(resumeAndCloseConnection)
  29. .then(finish)
  30. .then(null, aError => {
  31. ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
  32. });
  33. testChromeActor();
  34. });
  35. }
  36. function testChromeActor() {
  37. gClient.getProcess().then(aResponse => {
  38. gClient.addListener("newGlobal", onNewGlobal);
  39. let actor = aResponse.form.actor;
  40. gClient.attachTab(actor, (response, tabClient) => {
  41. tabClient.attachThread(null, (aResponse, aThreadClient) => {
  42. gThreadClient = aThreadClient;
  43. gThreadClient.addListener("newSource", onNewSource);
  44. if (aResponse.error) {
  45. ok(false, "Couldn't attach to the chrome debugger.");
  46. gAttached.reject();
  47. } else {
  48. ok(true, "Attached to the chrome debugger.");
  49. gAttached.resolve();
  50. // Ensure that a new chrome global will be created.
  51. gBrowser.selectedTab = gBrowser.addTab("about:mozilla");
  52. }
  53. });
  54. });
  55. });
  56. }
  57. function onNewGlobal() {
  58. ok(true, "Received a new chrome global.");
  59. gClient.removeListener("newGlobal", onNewGlobal);
  60. gNewGlobal.resolve();
  61. }
  62. function onNewSource(aEvent, aPacket) {
  63. if (aPacket.source.url.startsWith("chrome:")) {
  64. ok(true, "Received a new chrome source: " + aPacket.source.url);
  65. gThreadClient.removeListener("newSource", onNewSource);
  66. gNewChromeSource.resolve();
  67. }
  68. }
  69. function resumeAndCloseConnection() {
  70. let deferred = promise.defer();
  71. gThreadClient.resume(() => deferred.resolve(gClient.close()));
  72. return deferred.promise;
  73. }
  74. registerCleanupFunction(function () {
  75. gClient = null;
  76. gThreadClient = null;
  77. gAttached = null;
  78. gNewGlobal = null;
  79. gNewChromeSource = null;
  80. customLoader = null;
  81. DebuggerServer = null;
  82. });