diff options
-rw-r--r-- | dom/base/Crypto.cpp | 21 | ||||
-rw-r--r-- | dom/base/Crypto.h | 3 | ||||
-rw-r--r-- | dom/webidl/Crypto.webidl | 3 |
3 files changed, 27 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(); diff --git a/dom/webidl/Crypto.webidl b/dom/webidl/Crypto.webidl index 31574a219c..2ef7b5d21d 100644 --- a/dom/webidl/Crypto.webidl +++ b/dom/webidl/Crypto.webidl @@ -18,4 +18,7 @@ interface Crypto { [Throws] ArrayBufferView getRandomValues(ArrayBufferView array); + + [SecureContext] + DOMString randomUUID(); }; |