Bug 780269 - save SourceMap header in worker loader
MozReview-Commit-ID: 2QHHFlfzg0P
--- a/dom/workers/ScriptLoader.cpp
+++ b/dom/workers/ScriptLoader.cpp
@@ -226,16 +226,17 @@ struct ScriptLoadInfo
{
ScriptLoadInfo()
: mScriptTextBuf(nullptr)
, mScriptTextLength(0)
, mLoadResult(NS_ERROR_NOT_INITIALIZED)
, mLoadingFinished(false)
, mExecutionScheduled(false)
, mExecutionResult(false)
+ , mHasSourceMapURL(false)
, mCacheStatus(Uncached)
, mLoadFlags(nsIRequest::LOAD_NORMAL)
{ }
~ScriptLoadInfo()
{
if (mScriptTextBuf) {
js_free(mScriptTextBuf);
@@ -268,16 +269,19 @@ struct ScriptLoadInfo
char16_t* mScriptTextBuf;
size_t mScriptTextLength;
nsresult mLoadResult;
bool mLoadingFinished;
bool mExecutionScheduled;
bool mExecutionResult;
+ bool mHasSourceMapURL; // Does the HTTP header have a source map url?
+ nsString mSourceMapURL; // Holds source map url for loaded scripts
+
enum CacheStatus {
// By default a normal script is just loaded from the network. But for
// ServiceWorkers, we have to check if the cache contains the script and
// load it from the cache.
Uncached,
WritingToCache,
@@ -1084,16 +1088,26 @@ private:
Unused << httpChannel->GetResponseHeader(
NS_LITERAL_CSTRING("content-security-policy-report-only"),
tCspROHeaderValue);
Unused << httpChannel->GetResponseHeader(
NS_LITERAL_CSTRING("referrer-policy"),
tRPHeaderCValue);
+
+ nsAutoCString sourceMapURL;
+ rv = httpChannel->GetResponseHeader(NS_LITERAL_CSTRING("SourceMap"), sourceMapURL);
+ if (NS_FAILED(rv)) {
+ rv = httpChannel->GetResponseHeader(NS_LITERAL_CSTRING("X-SourceMap"), sourceMapURL);
+ }
+ if (NS_SUCCEEDED(rv)) {
+ aLoadInfo.mHasSourceMapURL = true;
+ aLoadInfo.mSourceMapURL = NS_ConvertUTF8toUTF16(sourceMapURL);
+ }
}
// May be null.
nsIDocument* parentDoc = mWorkerPrivate->GetDocument();
// Use the regular ScriptLoader for this grunt work! Should be just fine
// because we're running on the main thread.
// Unlike <script> tags, Worker scripts are always decoded as UTF-8,
@@ -1952,16 +1966,20 @@ ScriptExecutorRunnable::WorkerRun(JSCont
if (mScriptLoader.mWorkerScriptType == DebuggerScript) {
options.setVersion(JSVERSION_LATEST);
}
MOZ_ASSERT(loadInfo.mMutedErrorFlag.isSome());
options.setMutedErrors(loadInfo.mMutedErrorFlag.valueOr(true));
+ if (loadInfo.mHasSourceMapURL) {
+ options.setSourceMapURL(loadInfo.mSourceMapURL.get());
+ }
+
JS::SourceBufferHolder srcBuf(loadInfo.mScriptTextBuf,
loadInfo.mScriptTextLength,
JS::SourceBufferHolder::GiveOwnership);
loadInfo.mScriptTextBuf = nullptr;
loadInfo.mScriptTextLength = 0;
// Our ErrorResult still shouldn't be a failure.
MOZ_ASSERT(!mScriptLoader.mRv.Failed(), "Who failed it and why?");