diff --git a/dom/worklet/WorkletThread.cpp b/dom/worklet/WorkletThread.cpp index 39ae90a163490..aaba408866c8e 100644 --- a/dom/worklet/WorkletThread.cpp +++ b/dom/worklet/WorkletThread.cpp @@ -169,11 +169,33 @@ class WorkletJSContext final : public CycleCollectedJSContext { } void ReportError(JSErrorReport* aReport, - JS::ConstUTF8CharsZ aToStringResult) override { - + JS::ConstUTF8CharsZ aToStringResult) override; + + uint64_t GetCurrentWorkletWindowID() { + JSObject* global = JS::CurrentGlobalOrNull(Context()); + if (NS_WARN_IF(!global)) { + return 0; + } + nsIGlobalObject* nativeGlobal = xpc::NativeGlobal(global); + nsCOMPtr workletGlobal = + do_QueryInterface(nativeGlobal); + if (NS_WARN_IF(!workletGlobal)) { + return 0; + } + return workletGlobal->Impl()->LoadInfo().InnerWindowID(); } }; +void WorkletJSContext::ReportError(JSErrorReport* aReport, + JS::ConstUTF8CharsZ aToStringResult) { + RefPtr xpcReport = new xpc::ErrorReport(); + xpcReport->Init(aReport, aToStringResult.c_str(), IsSystemCaller(), + GetCurrentWorkletWindowID()); + + RefPtr reporter = new AsyncErrorReporter(xpcReport); + NS_DispatchToMainThread(reporter); +} +