Index: chrome/browser/sync/glue/session_model_associator_mac.mm |
diff --git a/chrome/browser/sync/glue/session_model_associator_mac.mm b/chrome/browser/sync/glue/session_model_associator_mac.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..16635b2ca4854d3cc9c106f2218f5be122bd15fe |
--- /dev/null |
+++ b/chrome/browser/sync/glue/session_model_associator_mac.mm |
@@ -0,0 +1,52 @@ |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/sync/glue/session_model_associator.h" |
+ |
+#import <Foundation/Foundation.h> |
+#import <SystemConfiguration/SCDynamicStoreCopySpecific.h> |
+#include <sys/sysctl.h> // sysctlbyname() |
+ |
+#include "base/mac/foundation_util.h" |
+#include "base/mac/mac_util.h" |
+#include "base/memory/scoped_nsobject.h" |
+#include "base/string_util.h" |
+#include "base/sys_info.h" |
+#include "base/sys_string_conversions.h" |
+ |
+@interface NSHost(SnowLeopardAPI) |
+- (NSString*)localizedName; |
+@end |
+ |
+namespace browser_sync { |
+ |
+// Static |
+std::string SessionModelAssociator::GetHardwareModelName() { |
+ NSHost* myHost = [NSHost currentHost]; |
+ if ([myHost respondsToSelector:@selector(localizedName)]) { |
+ return base::SysNSStringToUTF8([myHost localizedName]); |
+ } |
+ // Fallback for 10.5 |
+ scoped_nsobject<NSString> computerName(base::mac::CFToNSCast( |
+ SCDynamicStoreCopyComputerName(NULL, NULL))); |
+ if (computerName.get() != NULL) { |
+ return base::SysNSStringToUTF8(computerName.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 browser_sync |