static void AnnotateInterfaceRegistrationForHive(JSONWriter& aJson, HKEY aHive, REFIID aIid, const JSONWriter::CollectionStyle aStyle) { nsAutoString interfaceSubKey; interfaceSubKey.AppendLiteral(kSoftwareClasses); interfaceSubKey.AppendLiteral(kInterface); nsAutoString iid; GUIDToString(aIid, iid); interfaceSubKey.Append(iid); nsAutoString interfaceName; if (GetStringValue(aHive, interfaceSubKey, kDefaultValue, interfaceName)) { aJson.StringProperty("InterfaceName", NS_ConvertUTF16toUTF8(interfaceName).get()); } nsAutoString psSubKey(interfaceSubKey); psSubKey.AppendLiteral(kProxyStubClsid32); nsAutoString psClsid; if (GetStringValue(aHive, psSubKey, kDefaultValue, psClsid)) { aJson.StartObjectProperty("ProxyStub", aStyle); aJson.StringProperty("CLSID", NS_ConvertUTF16toUTF8(psClsid).get()); AnnotateClsidRegistrationForHive(aJson, aHive, psClsid, aStyle); aJson.EndObject(); } nsAutoString typelibSubKey(interfaceSubKey); typelibSubKey.AppendLiteral(kTypeLib); nsAutoString typelibId; bool haveTypelibId = GetStringValue(aHive, typelibSubKey, kDefaultValue, typelibId); nsAutoString typelibVersion; bool haveTypelibVersion = GetStringValue(aHive, typelibSubKey, kVersion, typelibVersion); if (haveTypelibId || haveTypelibVersion) { aJson.StartObjectProperty("TypeLib", aStyle); } if (haveTypelibId) { aJson.StringProperty("ID", NS_ConvertUTF16toUTF8(typelibId).get()); } if (haveTypelibVersion) { aJson.StringProperty("Version", NS_ConvertUTF16toUTF8(typelibVersion).get()); } if (haveTypelibId && haveTypelibVersion) { AnnotateTypelibRegistrationForHive(aJson, aHive, typelibId, typelibVersion, aStyle); } if (haveTypelibId || haveTypelibVersion) { aJson.EndObject(); } }
static void AnnotateClsidRegistrationForHive(JSONWriter& aJson, HKEY aHive, const nsAString& aClsid, const JSONWriter::CollectionStyle aStyle) { nsAutoString clsidSubkey; clsidSubkey.AppendLiteral(kSoftwareClasses); clsidSubkey.AppendLiteral(kClsid); clsidSubkey.Append(aClsid); nsAutoString className; if (GetStringValue(aHive, clsidSubkey, kDefaultValue, className)) { aJson.StringProperty("ClassName", NS_ConvertUTF16toUTF8(className).get()); } nsAutoString inprocServerSubkey(clsidSubkey); inprocServerSubkey.AppendLiteral(kInprocServer32); nsAutoString pathToServerDll; if (GetStringValue(aHive, inprocServerSubkey, kDefaultValue, pathToServerDll)) { aJson.StringProperty("Path", NS_ConvertUTF16toUTF8(pathToServerDll).get()); if (GetLoadedPath(pathToServerDll)) { aJson.StringProperty("LoadedPath", NS_ConvertUTF16toUTF8(pathToServerDll).get()); } } nsAutoString apartment; if (GetStringValue(aHive, inprocServerSubkey, kThreadingModel, apartment)) { aJson.StringProperty("ThreadingModel", NS_ConvertUTF16toUTF8(apartment).get()); } }
static void AnnotateTypelibRegistrationForHive(JSONWriter& aJson, HKEY aHive, const nsAString& aTypelibId, const nsAString& aTypelibVersion, const JSONWriter::CollectionStyle aStyle) { nsAutoString typelibSubKey; typelibSubKey.AppendLiteral(kSoftwareClasses); typelibSubKey.AppendLiteral(kTypeLib); typelibSubKey.AppendLiteral(kBackslash); typelibSubKey.Append(aTypelibId); typelibSubKey.AppendLiteral(kBackslash); typelibSubKey.Append(aTypelibVersion); nsAutoString typelibDesc; if (GetStringValue(aHive, typelibSubKey, kDefaultValue, typelibDesc)) { aJson.StringProperty("Description", NS_ConvertUTF16toUTF8(typelibDesc).get()); } nsAutoString flagsSubKey(typelibSubKey); flagsSubKey.AppendLiteral(kBackslash); flagsSubKey.AppendLiteral(kFlags); nsAutoString typelibFlags; if (GetStringValue(aHive, flagsSubKey, kDefaultValue, typelibFlags)) { aJson.StringProperty("Flags", NS_ConvertUTF16toUTF8(typelibFlags).get()); } HKEY rawTypelibKey; LONG result = RegOpenKeyEx(aHive, typelibSubKey.get(), 0, KEY_READ, &rawTypelibKey); if (result != ERROR_SUCCESS) { return; } nsAutoRegKey typelibKey(rawTypelibKey); const size_t kMaxLcidCharLen = 9; WCHAR keyName[kMaxLcidCharLen]; for (DWORD index = 0; result == ERROR_SUCCESS; ++index) { DWORD keyNameLength = ArrayLength(keyName); result = RegEnumKeyEx(typelibKey, index, keyName, &keyNameLength, nullptr, nullptr, nullptr, nullptr); unsigned long lcid; if (result == ERROR_SUCCESS && ConvertLCID(keyName, WrapNotNull(&lcid))) { nsDependentString strLcid(keyName, keyNameLength); aJson.StartObjectProperty(NS_ConvertUTF16toUTF8(strLcid).get(), aStyle); AnnotateTypelibPlatform(aJson, typelibKey, strLcid, kWin32, aStyle); #if defined(HAVE_64BIT_BUILD) AnnotateTypelibPlatform(aJson, typelibKey, strLcid, kWin64, aStyle); #endif aJson.EndObject(); } } }
void DeprecationReportBody::ToJSON(JSONWriter& aWriter) const { aWriter.StringProperty("id", NS_ConvertUTF16toUTF8(mId).get()); // TODO: anticipatedRemoval? https://github.com/w3c/reporting/issues/132 aWriter.StringProperty("message", NS_ConvertUTF16toUTF8(mMessage).get()); if (mSourceFile.IsEmpty()) { aWriter.NullProperty("sourceFile"); } else { aWriter.StringProperty("sourceFile", NS_ConvertUTF16toUTF8(mSourceFile).get()); } if (mLineNumber.IsNull()) { aWriter.NullProperty("lineNumber"); } else { aWriter.IntProperty("lineNumber", mLineNumber.Value()); } if (mColumnNumber.IsNull()) { aWriter.NullProperty("columnNumber"); } else { aWriter.IntProperty("columnNumber", mColumnNumber.Value()); } }
static void CheckTlbPath(JSONWriter& aJson, const nsAString& aTypelibPath) { const nsString& flatPath = PromiseFlatString(aTypelibPath); DWORD bufCharLen = ExpandEnvironmentStrings(flatPath.get(), nullptr, 0); auto buf = MakeUnique<WCHAR[]>(bufCharLen); if (!ExpandEnvironmentStrings(flatPath.get(), buf.get(), bufCharLen)) { return; } // See whether this tlb can actually be loaded RefPtr<ITypeLib> typeLib; HRESULT hr = LoadTypeLibEx(buf.get(), REGKIND_NONE, getter_AddRefs(typeLib)); nsPrintfCString loadResult("0x%08X", hr); aJson.StringProperty("LoadResult", loadResult.get()); }
static void AnnotateTypelibPlatform(JSONWriter& aJson, HKEY aBaseKey, const nsAString& aLcidSubkey, const char16_t (&aPlatform)[N], const JSONWriter::CollectionStyle aStyle) { nsLiteralString platform(aPlatform); nsAutoString fullSubkey(aLcidSubkey); fullSubkey.AppendLiteral(kBackslash); fullSubkey.Append(platform); nsAutoString tlbPath; if (GetStringValue(aBaseKey, fullSubkey, kDefaultValue, tlbPath)) { aJson.StartObjectProperty(NS_ConvertUTF16toUTF8(platform).get(), aStyle); aJson.StringProperty("Path", NS_ConvertUTF16toUTF8(tlbPath).get()); CheckTlbPath(aJson, tlbPath); aJson.EndObject(); } }