Bug 1319049 - fix RegExp previewer for worker debugging;r=ochameau draft
authorJulian Descottes <jdescottes@mozilla.com>
Mon, 19 Dec 2016 10:58:08 +0100
changeset 451009 7b24311401b9cf7241eead84ca8b3c0f95f6a0cd
parent 450991 ab0aacc01abaf06b2985b2b73ee8562322f495b1
child 539890 c7ec5e303e525e7447d68f8d84ea24784eaec991
push id39015
push userjdescottes@mozilla.com
push dateMon, 19 Dec 2016 10:00:27 +0000
reviewersochameau
bugs1319049
milestone53.0a1
Bug 1319049 - fix RegExp previewer for worker debugging;r=ochameau MozReview-Commit-ID: D8hRGV0MWoZ
devtools/client/debugger/test/mochitest/browser_dbg_worker-console-04.js
devtools/client/webconsole/test/browser.ini
devtools/client/webconsole/test/browser_webconsole_output_regexp.js
devtools/client/webconsole/test/test-console-output-regexp.html
devtools/server/actors/object.js
--- a/devtools/client/debugger/test/mochitest/browser_dbg_worker-console-04.js
+++ b/devtools/client/debugger/test/mochitest/browser_dbg_worker-console-04.js
@@ -1,23 +1,28 @@
-// Check that the date previewer works in the console of a worker debugger.
+// Check that the date and regexp previewers work in the console of a worker debugger.
 
 "use strict";
 
 const TAB_URL = EXAMPLE_URL + "doc_WorkerActor.attachThread-tab.html";
 const WORKER_URL = "code_WorkerActor.attachThread-worker.js";
 
 add_task(function* testPausedByConsole() {
   let {client, tab, workerClient, toolbox} =
     yield initWorkerDebugger(TAB_URL, WORKER_URL);
 
   info("Check Date objects can be used in the console");
   let jsterm = yield getSplitConsole(toolbox);
   let executed = yield jsterm.execute("new Date(0)");
   ok(executed.textContent.includes("1970-01-01T00:00:00.000Z"),
       "Text for message appeared correct");
 
+  info("Check RegExp objects can be used in the console");
+  executed = yield jsterm.execute("new RegExp('.*')");
+  ok(executed.textContent.includes("/.*/"),
+      "Text for message appeared correct");
+
   terminateWorkerInTab(tab, WORKER_URL);
   yield waitForWorkerClose(workerClient);
   yield gDevTools.closeToolbox(TargetFactory.forWorker(workerClient));
   yield close(client);
   yield removeTab(tab);
 });
--- a/devtools/client/webconsole/test/browser.ini
+++ b/devtools/client/webconsole/test/browser.ini
@@ -79,17 +79,16 @@ support-files =
   test-console.html
   test-console-workers.html
   test-console-table.html
   test-console-output-02.html
   test-console-output-03.html
   test-console-output-04.html
   test-console-output-dom-elements.html
   test-console-output-events.html
-  test-console-output-regexp.html
   test-console-column.html
   test-consoleiframes.html
   test-console-trace-async.html
   test-certificate-messages.html
   test-cu-reporterror.js
   test-data.json
   test-data.json^headers^
   test-duplicate-error.html
--- a/devtools/client/webconsole/test/browser_webconsole_output_regexp.js
+++ b/devtools/client/webconsole/test/browser_webconsole_output_regexp.js
@@ -1,26 +1,25 @@
 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
 /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
-// Test the webconsole output for various types of objects.
+// Test the webconsole output for a regexp object.
 
 "use strict";
 
-const TEST_URI = "http://example.com/browser/devtools/client/webconsole/" +
-                 "test/test-console-output-regexp.html";
+const TEST_URI = "data:text/html;charset=utf8,<p>test regexp output";
 
 var inputTests = [
   // 0
   {
     input: "/foo/igym",
     output: "/foo/gimy",
-    printOutput: "Error: source called",
+    printOutput: "/foo/gimy",
     inspectable: true,
   },
 ];
 
 function test() {
   requestLongerTimeout(2);
   Task.spawn(function* () {
     let {tab} = yield loadTab(TEST_URI);
deleted file mode 100644
--- a/devtools/client/webconsole/test/test-console-output-regexp.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE HTML>
-<html dir="ltr" lang="en-US">
-<head>
-  <meta charset="utf-8">
-  <title>Test the web console output for RegExp</title>
-  <!--
-  - Any copyright is dedicated to the Public Domain.
-  - http://creativecommons.org/publicdomain/zero/1.0/
-  -->
-</head>
-<body>
-  <p>hello world!</p>
-
-  <script type="text/javascript">
-Object.defineProperty(RegExp.prototype, "flags", {
-  get: function() { throw Error("flags called"); }
-})
-Object.defineProperty(RegExp.prototype, "source", {
-  get: function() { throw Error("source called"); },
-})
-  </script>
-</body>
-</html>
--- a/devtools/server/actors/object.js
+++ b/devtools/server/actors/object.js
@@ -1153,17 +1153,21 @@ DebuggerServer.ObjectActorPreviewers = {
         };
       }
     }
 
     return true;
   }],
 
   RegExp: [function ({obj, hooks}, grip) {
-    let str = RegExp.prototype.toString.call(obj.unsafeDereference());
+    let str = DevToolsUtils.callPropertyOnObject(obj, "toString");
+    if (typeof str != "string") {
+      return false;
+    }
+
     grip.displayString = hooks.createValueGrip(str);
     return true;
   }],
 
   Date: [function ({obj, hooks}, grip) {
     let time = DevToolsUtils.callPropertyOnObject(obj, "getTime");
     if (typeof time != "number") {
       return false;