summaryrefslogtreecommitdiff
path: root/dom/base/Crypto.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dom/base/Crypto.cpp')
-rw-r--r--dom/base/Crypto.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/dom/base/Crypto.cpp b/dom/base/Crypto.cpp
index 863c26c902..2c72fb6692 100644
--- a/dom/base/Crypto.cpp
+++ b/dom/base/Crypto.cpp
@@ -115,6 +115,27 @@ Crypto::GetRandomValues(JSContext* aCx, const ArrayBufferView& aArray,
aRetval.set(view);
}
+void Crypto::RandomUUID(nsAString& aRetVal)
+{
+ // NSID_LENGTH == 39 == 36 UUID chars + 2 curly braces + 1 NUL byte
+ static_assert(NSID_LENGTH == 39);
+
+ nsCOMPtr<nsIUUIDGenerator> uuidgen =
+ do_GetService("@mozilla.org/uuid-generator;1");
+
+ nsID uuid;
+
+ nsresult rv = uuidgen->GenerateUUIDInPlace(&uuid);
+
+ char uuidBuffer[NSID_LENGTH];
+ uuid.ToProvidedString(uuidBuffer);
+
+ nsCString asciiString(uuidBuffer);
+
+ // Convert UUID chars to UTF-16 retval, omitting the curly braces and NUL
+ CopyASCIItoUTF16(Substring(asciiString, 1, NSID_LENGTH - 3), aRetVal);
+}
+
SubtleCrypto*
Crypto::Subtle()
{