diff options
Diffstat (limited to 'base/ios')
-rw-r--r-- | base/ios/OWNERS | 3 | ||||
-rw-r--r-- | base/ios/device_util.mm | 8 | ||||
-rw-r--r-- | base/ios/device_util_unittest.mm | 6 | ||||
-rw-r--r-- | base/ios/ios_util.h | 26 | ||||
-rw-r--r-- | base/ios/ios_util.mm | 42 |
5 files changed, 82 insertions, 3 deletions
diff --git a/base/ios/OWNERS b/base/ios/OWNERS new file mode 100644 index 0000000..62564002 --- /dev/null +++ b/base/ios/OWNERS @@ -0,0 +1,3 @@ +qsr@chromium.org +rohitrao@chromium.org +stuartmorgan@chromium.org diff --git a/base/ios/device_util.mm b/base/ios/device_util.mm index 1d16de4b..e6801ab 100644 --- a/base/ios/device_util.mm +++ b/base/ios/device_util.mm @@ -5,7 +5,7 @@ #include "base/ios/device_util.h" #include <CommonCrypto/CommonDigest.h> -#import <Foundation/Foundation.h> +#import <UIKit/UIKit.h> #include <ifaddrs.h> #include <net/if_dl.h> @@ -13,6 +13,7 @@ #include <sys/socket.h> #include <sys/sysctl.h> +#include "base/ios/ios_util.h" #include "base/logging.h" #include "base/string_util.h" #include "base/stringprintf.h" @@ -103,7 +104,10 @@ std::string GetDeviceIdentifier(const char* salt) { NSString* client_id = [defaults stringForKey:kClientIdPreferenceKey]; if (!client_id) { - client_id = base::SysUTF8ToNSString(GetRandomId()); + if (base::ios::IsRunningOnIOS6OrLater()) + client_id = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; + else + client_id = base::SysUTF8ToNSString(GetRandomId()); [defaults setObject:client_id forKey:kClientIdPreferenceKey]; [defaults synchronize]; } diff --git a/base/ios/device_util_unittest.mm b/base/ios/device_util_unittest.mm index 34c2d9c..b8ba10f 100644 --- a/base/ios/device_util_unittest.mm +++ b/base/ios/device_util_unittest.mm @@ -5,6 +5,7 @@ #import <Foundation/Foundation.h> #include "base/ios/device_util.h" +#include "base/ios/ios_util.h" #include "base/sys_string_conversions.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest_mac.h" @@ -47,7 +48,10 @@ TEST_F(DeviceUtilTest, GetDeviceIdentifier) { [defaults synchronize]; std::string new_default_id = ios::device_util::GetDeviceIdentifier(NULL); - EXPECT_NE(default_id, new_default_id); + if (base::ios::IsRunningOnIOS6OrLater()) + EXPECT_EQ(default_id, new_default_id); + else + EXPECT_NE(default_id, new_default_id); } } // namespace diff --git a/base/ios/ios_util.h b/base/ios/ios_util.h new file mode 100644 index 0000000..e8f9806 --- /dev/null +++ b/base/ios/ios_util.h @@ -0,0 +1,26 @@ +// Copyright 2012 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. + +#ifndef BASE_IOS_IOS_UTIL_H_ +#define BASE_IOS_IOS_UTIL_H_ + +#include "base/base_export.h" +#include "base/basictypes.h" + +namespace base { +namespace ios { + +// Returns whether the operation system is iOS 5 or later. +BASE_EXPORT bool IsRunningOnIOS5OrLater(); + +// Returns whether the operation system is iOS 6 or later. +BASE_EXPORT bool IsRunningOnIOS6OrLater(); + +// Returns whether the operation system is at the given version or later. +BASE_EXPORT bool IsRunningOnOrLater(int32 major, int32 minor, int32 bug_fix); + +} // namespace ios +} // namespace base + +#endif // BASE_IOS_IOS_UTIL_H_ diff --git a/base/ios/ios_util.mm b/base/ios/ios_util.mm new file mode 100644 index 0000000..37f386d --- /dev/null +++ b/base/ios/ios_util.mm @@ -0,0 +1,42 @@ +// Copyright 2012 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 "base/ios/ios_util.h" + +#include "base/sys_info.h" + +namespace { +// Return a 3 elements array containing the major, minor and bug fix version of +// the OS. +const int32* OSVersionAsArray() { + int32* digits = new int32[3]; + base::SysInfo::OperatingSystemVersionNumbers( + &digits[0], &digits[1], &digits[2]); + return digits; +} +} // namespace + +namespace base { +namespace ios { + +bool IsRunningOnIOS5OrLater() { + return IsRunningOnOrLater(5, 0, 0); +} + +bool IsRunningOnIOS6OrLater() { + return IsRunningOnOrLater(6, 0, 0); +} + +bool IsRunningOnOrLater(int32 major, int32 minor, int32 bug_fix) { + static const int32* current_version = OSVersionAsArray(); + int32 version[] = { major, minor, bug_fix }; + for (size_t i = 0; i < arraysize(version); i++) { + if (current_version[i] != version[i]) + return current_version[i] > version[i]; + } + return true; +} + +} // namespace ios +} // namespace base |