#if OS(WINDOWS)
#include <objbase.h>
-#ifndef ARRAYSIZE
-#define ARRAYSIZE(a) (sizeof(a) / sizeof((a)[0]))
-#endif
#elif OS(DARWIN)
#include <CoreFoundation/CoreFoundation.h>
-#elif OS(LINUX)
+#elif OS(LINUX) && !PLATFORM(CHROMIUM)
#include <stdio.h>
+#elif OS(LINUX) && PLATFORM(CHROMIUM)
+#include <wtf/RandomNumber.h>
+#include <wtf/text/StringBuilder.h>
#endif
namespace WebCore {
if (FAILED(hr))
return String();
wchar_t uuidStr[40];
- int num = StringFromGUID2(uuid, reinterpret_cast<LPOLESTR>(uuidStr), ARRAYSIZE(uuidStr));
+ 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);
String canonicalUuidStr = uuidStr.lower(); // make it lower.
ASSERT(canonicalUuidStr[uuidVersionIdentifierIndex] == uuidVersionRequired);
return canonicalUuidStr;
-#elif OS(LINUX)
+#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();
String canonicalUuidStr = String(uuidStr).lower(); // make it lower.
ASSERT(canonicalUuidStr[uuidVersionIdentifierIndex] == uuidVersionRequired);
return canonicalUuidStr;
+#elif OS(LINUX) && PLATFORM(CHROMIUM)
+ unsigned randomData[4];
+ for (size_t i = 0; i < sizeof(randomData) / sizeof(randomData[0]); ++i)
+ randomData[i] = static_cast<unsigned>(randomNumber() * (std::numeric_limits<unsigned>::max() + 1.0));
+
+ // Format as Version 4 UUID.
+ StringBuilder builder;
+ builder.append(String::format("%08x", randomData[0]));
+ builder.append("-");
+ builder.append(String::format("%04x", randomData[1] >> 16));
+ builder.append("-4");
+ builder.append(String::format("%03x", randomData[1] & 0x00000fff));
+ builder.append("-");
+ builder.append(String::format("%x", (randomData[2] >> 30) | 0x8)); // Condense this byte to 8, 9, a, and b.
+ builder.append(String::format("%03x", (randomData[2] >> 16) & 0x00000fff));
+ builder.append("-");
+ builder.append(String::format("%04x", randomData[2] & 0x0000ffff));
+ builder.append(String::format("%08x", randomData[3]));
+ return builder.toString();
#else
notImplemented();
return String();
-#endif
+#endif
}
}