Title: [91963] trunk/Source/WebCore
Revision
91963
Author
jsc...@chromium.org
Date
2011-07-28 17:24:20 -0700 (Thu, 28 Jul 2011)

Log Message

Simplify createCanonicalUUIDString implementation.
https://bugs.webkit.org/show_bug.cgi?id=65157

All ports support OS_RANDOMNESS, so better to have one implementation.

Reviewed by Adam Barth.

Change covered by existing tests.

* platform/UUID.cpp:
(WebCore::createCanonicalUUIDString):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (91962 => 91963)


--- trunk/Source/WebCore/ChangeLog	2011-07-29 00:10:23 UTC (rev 91962)
+++ trunk/Source/WebCore/ChangeLog	2011-07-29 00:24:20 UTC (rev 91963)
@@ -1,3 +1,17 @@
+2011-07-28  Justin Schuh  <jsc...@chromium.org>
+
+        Simplify createCanonicalUUIDString implementation.
+        https://bugs.webkit.org/show_bug.cgi?id=65157
+
+        All ports support OS_RANDOMNESS, so better to have one implementation.
+
+        Reviewed by Adam Barth.
+
+        Change covered by existing tests.
+
+        * platform/UUID.cpp:
+        (WebCore::createCanonicalUUIDString):
+
 2011-07-28  Devdatta Deshpande  <pwj...@motorola.com>
 
         Fixed gif animation dependency on system time

Modified: trunk/Source/WebCore/platform/UUID.cpp (91962 => 91963)


--- trunk/Source/WebCore/platform/UUID.cpp	2011-07-29 00:10:23 UTC (rev 91962)
+++ trunk/Source/WebCore/platform/UUID.cpp	2011-07-29 00:24:20 UTC (rev 91963)
@@ -32,75 +32,21 @@
 #include "UUID.h"
 
 #include "NotImplemented.h"
-
-#if PLATFORM(QT)
-#include <QUuid>
-#endif
-
-#if OS(WINDOWS)
-#include <objbase.h>
-#elif OS(DARWIN) && USE(CF)
-#include <CoreFoundation/CoreFoundation.h>
-#elif OS(LINUX) && !PLATFORM(CHROMIUM)
-#include <stdio.h>
-#elif (OS(LINUX) && PLATFORM(CHROMIUM)) || (OS(DARWIN) && !USE(CF))
+#include <wtf/CryptographicallyRandomNumber.h>
 #include <wtf/HexNumber.h>
-#include <wtf/RandomNumber.h>
 #include <wtf/text/StringBuilder.h>
-#endif
 
 namespace WebCore {
 
-static const char uuidVersionRequired = '4';
-static const int uuidVersionIdentifierIndex = 14;
-
 String createCanonicalUUIDString()
 {
-#if PLATFORM(QT) && !defined(QT_NO_QUUID_STRING)
-    QUuid uuid = QUuid::createUuid();
-    String canonicalUuidStr = uuid.toString().mid(1, 36).toLower(); // remove opening and closing bracket and make it lower.
-    ASSERT(canonicalUuidStr[uuidVersionIdentifierIndex] == uuidVersionRequired);
-    return canonicalUuidStr;
-#elif OS(WINDOWS)
-    GUID uuid = { 0 };
-    HRESULT hr = CoCreateGuid(&uuid);
-    if (FAILED(hr))
-        return String();
-    wchar_t uuidStr[40];
-    int num = StringFromGUID2(uuid, reinterpret_cast<LPOLESTR>(uuidStr), WTF_ARRAY_LENGTH(uuidStr));
-    ASSERT(num == 39);
-    String canonicalUuidStr = String(uuidStr + 1, num - 3).lower(); // remove opening and closing bracket and make it lower.
-    ASSERT(canonicalUuidStr[uuidVersionIdentifierIndex] == uuidVersionRequired);
-    return canonicalUuidStr;
-#elif OS(DARWIN) && USE(CF)
-    CFUUIDRef uuid = CFUUIDCreate(0);
-    CFStringRef uuidStrRef = CFUUIDCreateString(0, uuid);
-    String uuidStr(uuidStrRef);
-    CFRelease(uuidStrRef);
-    CFRelease(uuid);
-    String canonicalUuidStr = uuidStr.lower(); // make it lower.
-    ASSERT(canonicalUuidStr[uuidVersionIdentifierIndex] == uuidVersionRequired);
-    return canonicalUuidStr;
-#elif OS(LINUX) && !PLATFORM(CHROMIUM)
-    // This does not work for the linux system that turns on sandbox.
-    FILE* fptr = fopen("/proc/sys/kernel/random/uuid", "r");
-    if (!fptr)
-        return String();
-    char uuidStr[37];
-    char* result = fgets(uuidStr, sizeof(uuidStr), fptr);
-    fclose(fptr);
-    if (!result)
-        return String();
-    String canonicalUuidStr = String(uuidStr).lower(); // make it lower.
-    ASSERT(canonicalUuidStr[uuidVersionIdentifierIndex] == uuidVersionRequired);
-    return canonicalUuidStr;
-#elif (OS(LINUX) && PLATFORM(CHROMIUM)) || (OS(DARWIN) && !USE(CF))
+#if USE(OS_RANDOMNESS)
     unsigned randomData[4];
-    for (size_t i = 0; i < WTF_ARRAY_LENGTH(randomData); ++i)
-        randomData[i] = static_cast<unsigned>(randomNumber() * (std::numeric_limits<unsigned>::max() + 1.0));
+    cryptographicallyRandomValues(reinterpret_cast<unsigned char*>(randomData), sizeof(randomData));
 
     // Format as Version 4 UUID.
     StringBuilder builder;
+    builder.reserveCapacity(36);
     appendUnsignedAsHexFixedSize(randomData[0], builder, 8, Lowercase);
     builder.append("-");
     appendUnsignedAsHexFixedSize(randomData[1] >> 16, builder, 4, Lowercase);
@@ -112,7 +58,6 @@
     builder.append("-");
     appendUnsignedAsHexFixedSize(randomData[2] & 0x0000ffff, builder, 4, Lowercase);
     appendUnsignedAsHexFixedSize(randomData[3], builder, 8, Lowercase);
-    builder.append("\n");
     return builder.toString();
 #else
     notImplemented();
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to