Open Bug 1400856 Opened 7 years ago Updated 2 years ago

[sourcemaps] Sourcemaps defined in inline scripts are not displayed

Categories

(DevTools :: Debugger, defect, P3)

defect

Tracking

(Not tracked)

REOPENED

People

(Reporter: julienw, Unassigned)

References

(Blocks 2 open bugs)

Details

Attachments

(2 files)

Attached file testcase-inline-sourcemaps.html (deleted) —
STR:
1. Open the attached file.
2. Open the debugger.

Expected:
* we can see the original sources.

Actual:
* we don't see the original sources.


Additional notes:
1. I generated this code with webpack:

  webpack --optimize-minimize --devtool inline-source-map script.js script-bundle.js

from the following code:

  function test(number) {
    const variable = number;
    console.log(variable);
  }

  document.querySelector('button').addEventListener('click', function() {
    test(5);
  });

2. This is happening in an important real-life testcase: https://paul.cx/public/exportify/exportify.html

This example uses JSXTransformer, which is now deprecated, but still used by some beginners. Not seeing the sources when you're a beginner is bad.

3. This works in Chrome. (tm)

4. This works fine when the script is not inline or when it's eval-ed.
Sourcemaps stuff is for :tromey :)
Flags: needinfo?(ttromey)
Confirmed; adding it to the list.
Blocks: source-maps
Flags: needinfo?(ttromey)
Priority: -- → P3
This seems to work but I am not completely confident in it yet.

diff --git a/devtools/server/actors/utils/TabSources.js b/devtools/server/actors/utils/TabSources.js
index d7f697b..ac12488 100644
--- a/devtools/server/actors/utils/TabSources.js
+++ b/devtools/server/actors/utils/TabSources.js
@@ -130,7 +130,7 @@ TabSources.prototype = {
         return this._sourceMappedSourceActors[source.url];
       }
 
-      if (isInlineSource) {
+      if (this._useSourceMaps && isInlineSource) {
         // If it's an inline source, the fake HTML source hasn't been
         // created yet (would have returned above), so flip this source
         // into a sourcemapped state by giving it an `originalUrl` which
I don't remember the details here any more, but I don't think that patch in in comment #3 is sufficient.
It might help in some cases but I think deeper changes are needed to make source maps work properly
in <script> and <style> elements.  There's some discussion of this in one of the other bugs, and also
in the source map planning document.
:wlach pinged me on irc to ask about the planning document, so I thought I'd post a link here:
https://docs.google.com/document/d/19TKnMJD3CMBzwByNE4aBBVWnl-AEan8Sf4hxi6J-eps/edit?usp=sharing

In particular the "SourceURL Handling" section outlines a possible plan.
I do wonder if there's a simpler way to achieve all this.  I couldn't think of one though.
Product: Firefox → DevTools

I believe this now works

Status: NEW → RESOLVED
Closed: 5 years ago
Resolution: --- → FIXED

Hey Jason, this does work for the testcase but not for the other URL.
I'm not sure what the difference is -- maybe that the inline script is dynamically added by JSXTransformer ?

Flags: needinfo?(jlaster)
Status: RESOLVED → REOPENED
Flags: needinfo?(jlaster)
Resolution: FIXED → ---
Severity: normal → S3
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: