browser_dbg_debugger-statement.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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 the behavior of the debugger statement.
  6. */
  7. const TAB_URL = EXAMPLE_URL + "doc_inline-debugger-statement.html";
  8. var gClient;
  9. var gTab;
  10. function test() {
  11. if (!DebuggerServer.initialized) {
  12. DebuggerServer.init();
  13. DebuggerServer.addBrowserActors();
  14. }
  15. let transport = DebuggerServer.connectPipe();
  16. gClient = new DebuggerClient(transport);
  17. gClient.connect().then(([aType, aTraits]) => {
  18. is(aType, "browser",
  19. "Root actor should identify itself as a browser.");
  20. addTab(TAB_URL)
  21. .then((aTab) => {
  22. gTab = aTab;
  23. return attachTabActorForUrl(gClient, TAB_URL);
  24. })
  25. .then(testEarlyDebuggerStatement)
  26. .then(testDebuggerStatement)
  27. .then(() => gClient.close())
  28. .then(finish)
  29. .then(null, aError => {
  30. ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
  31. });
  32. });
  33. }
  34. function testEarlyDebuggerStatement([aGrip, aResponse]) {
  35. let deferred = promise.defer();
  36. let onPaused = function (aEvent, aPacket) {
  37. ok(false, "Pause shouldn't be called before we've attached!");
  38. deferred.reject();
  39. };
  40. gClient.addListener("paused", onPaused);
  41. // This should continue without nesting an event loop and calling
  42. // the onPaused hook, because we haven't attached yet.
  43. callInTab(gTab, "runDebuggerStatement");
  44. gClient.removeListener("paused", onPaused);
  45. // Now attach and resume...
  46. gClient.request({ to: aResponse.threadActor, type: "attach" }, () => {
  47. gClient.request({ to: aResponse.threadActor, type: "resume" }, () => {
  48. ok(true, "Pause wasn't called before we've attached.");
  49. deferred.resolve([aGrip, aResponse]);
  50. });
  51. });
  52. return deferred.promise;
  53. }
  54. function testDebuggerStatement([aGrip, aResponse]) {
  55. let deferred = promise.defer();
  56. gClient.addListener("paused", (aEvent, aPacket) => {
  57. gClient.request({ to: aResponse.threadActor, type: "resume" }, () => {
  58. ok(true, "The pause handler was triggered on a debugger statement.");
  59. deferred.resolve();
  60. });
  61. });
  62. // Reach around the debugging protocol and execute the debugger statement.
  63. callInTab(gTab, "runDebuggerStatement");
  64. return deferred.promise;
  65. }
  66. registerCleanupFunction(function () {
  67. gClient = null;
  68. });