chromium/ios/chrome/browser/geolocation/model/authorization_status_cache_util.mm

// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#import "ios/chrome/browser/geolocation/model/authorization_status_cache_util.h"

#import <CoreLocation/CoreLocation.h>

namespace authorization_status_cache_util {

// The key to a NSUserDefaults entry storing the last received authorization
// status;
NSString* const kGeolocationAuthorizationStatusPreferenceKey =
    @"GeolocationAuthorizationStatusPreferenceKey";

std::optional<CLAuthorizationStatus> GetAuthorizationStatus() {
  if ([[NSUserDefaults standardUserDefaults]
          objectForKey:kGeolocationAuthorizationStatusPreferenceKey]) {
    return static_cast<CLAuthorizationStatus>(
        [[NSUserDefaults standardUserDefaults]
            integerForKey:kGeolocationAuthorizationStatusPreferenceKey]);
  }
  return std::nullopt;
}

void SetAuthorizationStatus(CLAuthorizationStatus status) {
  [[NSUserDefaults standardUserDefaults]
      setInteger:status
          forKey:kGeolocationAuthorizationStatusPreferenceKey];
}

void ClearAuthorizationStatusForTesting() {
  [[NSUserDefaults standardUserDefaults]
      setObject:nil
         forKey:kGeolocationAuthorizationStatusPreferenceKey];
}

}  // namespace authorization_status_cache_util