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..c89a62c7b574a95275a590dd6fe384be61d2bceb |
--- /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( |
Yaron
2011/09/01 22:19:46
Oops. I'll fix the 80 cols in the next go.
|
+ 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 |