Roll src/third_party/WebKit f36d5e0:68b67cd (svn 193299:193303)
[chromium-blink-merge.git] / base / guid_win.cc
blobda3453dc73c8b78de1ebc244c628f2f59426490b
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "base/guid.h"
7 #include <stdlib.h>
9 #include <objbase.h>
10 #include <windows.h>
12 #include "base/basictypes.h"
13 #include "base/logging.h"
14 #include "base/strings/string_util.h"
15 #include "base/strings/utf_string_conversions.h"
17 namespace base {
19 std::string GenerateGUID() {
20 const int kGUIDSize = 39;
22 GUID guid;
23 HRESULT guid_result = CoCreateGuid(&guid);
24 DCHECK(SUCCEEDED(guid_result));
25 if (!SUCCEEDED(guid_result))
26 return std::string();
28 std::wstring guid_string;
29 int result = StringFromGUID2(guid,
30 WriteInto(&guid_string, kGUIDSize), kGUIDSize);
31 DCHECK(result == kGUIDSize);
32 if (result != kGUIDSize)
33 return std::string();
35 return WideToUTF8(guid_string.substr(1, guid_string.length() - 2));
38 } // namespace base