// Copyright 2013 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 "ios/chrome/browser/install_time_util.h" #include #include #include "base/mac/foundation_util.h" namespace { NSString* const kInstallationTimeKey = @"omaha.InstallationTime"; // Returns the installation time of the application: this is the time the // application was first installed, not the time the last version was installed. // If the installation time is unknown, returns a base::Time corresponding to // |kUnknownInstallDate|. // To be noted: this value is reset if the application is uninstalled. base::Time GetNSUserDefaultsInstallationTime() { NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; CFAbsoluteTime time = [defaults doubleForKey:kInstallationTimeKey]; if (time == 0.0) return base::Time(); return base::Time::FromCFAbsoluteTime(time); } } // namespace namespace install_time_util { // 2 is used because 0 is a magic value for Time, and 1 was the pre-M29 value // which was migrated to a specific date (crbug.com/270124). const int64_t kUnknownInstallDate = 2; base::Time ComputeInstallationTime(bool is_first_run) { return ComputeInstallationTimeInternal(is_first_run, GetNSUserDefaultsInstallationTime()); } base::Time ComputeInstallationTimeInternal( bool is_first_run, base::Time ns_user_defaults_install_time) { if (is_first_run) return base::Time::Now(); if (ns_user_defaults_install_time.is_null()) return base::Time::FromTimeT(kUnknownInstallDate); return ns_user_defaults_install_time; } } // namespace install_time_util