From 061c6a26b09d04faf28a91f5a4933d57a4320646 Mon Sep 17 00:00:00 2001 From: Michael Layzell Date: Fri, 4 Aug 2017 15:10:17 -0400 Subject: [PATCH] Bug 1367406 - Part 3: Expose computed modules through .modules getter, r=froydnj MozReview-Commit-ID: F6aDnlwr9jt --- .../backgroundhangmonitor/HangDetails.cpp | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/toolkit/components/backgroundhangmonitor/HangDetails.cpp b/toolkit/components/backgroundhangmonitor/HangDetails.cpp index faf062e8e670..e49ace255b8e 100644 --- a/toolkit/components/backgroundhangmonitor/HangDetails.cpp +++ b/toolkit/components/backgroundhangmonitor/HangDetails.cpp @@ -144,12 +144,35 @@ nsHangDetails::GetStack(JSContext* aCx, JS::MutableHandle aVal) NS_IMETHODIMP nsHangDetails::GetModules(JSContext* aCx, JS::MutableHandleValue aVal) { - size_t length = 0; + auto& modules = mDetails.mStack.GetModules(); + size_t length = modules.Length(); JS::RootedObject retObj(aCx, JS_NewArrayObject(aCx, length)); if (!retObj) { return NS_ERROR_OUT_OF_MEMORY; } + for (size_t i = 0; i < length; ++i) { + const HangStack::Module& module = modules[i]; + JS::RootedObject jsModule(aCx, JS_NewArrayObject(aCx, 2)); + if (!jsModule) { + return NS_ERROR_OUT_OF_MEMORY; + } + + JS::RootedString name(aCx, JS_NewUCStringCopyN(aCx, module.mName.BeginReading(), module.mName.Length())); + if (!JS_DefineElement(aCx, jsModule, 0, name, JSPROP_ENUMERATE)) { + return NS_ERROR_OUT_OF_MEMORY; + } + + JS::RootedString breakpadId(aCx, JS_NewStringCopyN(aCx, module.mBreakpadId.BeginReading(), module.mBreakpadId.Length())); + if (!JS_DefineElement(aCx, jsModule, 1, breakpadId, JSPROP_ENUMERATE)) { + return NS_ERROR_OUT_OF_MEMORY; + } + + if (!JS_DefineElement(aCx, retObj, i, jsModule, JSPROP_ENUMERATE)) { + return NS_ERROR_OUT_OF_MEMORY; + } + } + aVal.setObject(*retObj); return NS_OK; }