summaryrefslogtreecommitdiff
path: root/dom/base
diff options
context:
space:
mode:
Diffstat (limited to 'dom/base')
-rw-r--r--dom/base/Crypto.cpp21
-rw-r--r--dom/base/Crypto.h3
2 files changed, 24 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()
{
diff --git a/dom/base/Crypto.h b/dom/base/Crypto.h
index 318eba5592..2893d299c0 100644
--- a/dom/base/Crypto.h
+++ b/dom/base/Crypto.h
@@ -9,6 +9,7 @@
#include "mozilla/dom/SubtleCrypto.h"
#include "nsIGlobalObject.h"
+#include "nsString.h"
#include "nsWrapperCache.h"
#include "mozilla/dom/TypedArray.h"
#define NS_DOMCRYPTO_CID \
@@ -39,6 +40,8 @@ public:
JS::MutableHandle<JSObject*> aRetval,
ErrorResult& aRv);
+void RandomUUID(nsAString& aRetVal);
+
SubtleCrypto*
Subtle();