| Index: sync/util/get_session_name_mac.mm
|
| diff --git a/sync/util/get_session_name_mac.mm b/sync/util/get_session_name_mac.mm
|
| index b8eb25e3e94d12f3842699e11211c793f2d7c22c..7f5940b5a040d9c7cf63cb58df5ff58d377719a4 100644
|
| --- a/sync/util/get_session_name_mac.mm
|
| +++ b/sync/util/get_session_name_mac.mm
|
| @@ -5,8 +5,10 @@
|
| #include "sync/util/get_session_name_mac.h"
|
|
|
| #import <SystemConfiguration/SCDynamicStoreCopySpecific.h>
|
| +#include <sys/sysctl.h>
|
|
|
| #include "base/mac/scoped_cftyperef.h"
|
| +#include "base/string_util.h"
|
| #include "base/sys_string_conversions.h"
|
|
|
| namespace syncer {
|
| @@ -16,10 +18,31 @@ std::string GetHardwareModelName() {
|
| // Do not use NSHost currentHost, as it's very slow. http://crbug.com/138570
|
| SCDynamicStoreContext context = { 0, NULL, NULL, NULL };
|
| base::mac::ScopedCFTypeRef<SCDynamicStoreRef> store(
|
| - SCDynamicStoreCreate(kCFAllocatorDefault, CFSTR("policy_subsystem"),
|
| + SCDynamicStoreCreate(kCFAllocatorDefault, CFSTR("chrome_sync"),
|
| NULL, &context));
|
| - CFStringRef machine_name = SCDynamicStoreCopyLocalHostName(store.get());
|
| - return base::SysCFStringRefToUTF8(machine_name);
|
| + base::mac::ScopedCFTypeRef<CFStringRef> machine_name(
|
| + SCDynamicStoreCopyLocalHostName(store.get()));
|
| + if (machine_name.get())
|
| + return base::SysCFStringRefToUTF8(machine_name.get());
|
| +
|
| + // Fall back to get computer name.
|
| + base::mac::ScopedCFTypeRef<CFStringRef> computer_name(
|
| + SCDynamicStoreCopyComputerName(store.get(), NULL));
|
| + if (computer_name.get())
|
| + return base::SysCFStringRefToUTF8(computer_name.get());
|
| +
|
| + // If all else fails, return to using a slightly nicer version of the
|
| + // hardware model.
|
| + char modelBuffer[256];
|
| + size_t length = sizeof(modelBuffer);
|
| + if (!sysctlbyname("hw.model", modelBuffer, &length, NULL, 0)) {
|
| + for (size_t i = 0; i < length; i++) {
|
| + if (IsAsciiDigit(modelBuffer[i]))
|
| + return std::string(modelBuffer, 0, i);
|
| + }
|
| + return std::string(modelBuffer, 0, length);
|
| + }
|
| + return "Unknown";
|
| }
|
|
|
| } // namespace internal
|
|
|