xref: /aosp_15_r20/external/cronet/base/apple/backup_util.mm (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker// Copyright 2021 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker// found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Worker#include "base/apple/backup_util.h"
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker#import <Foundation/Foundation.h>
8*6777b538SAndroid Build Coastguard Worker
9*6777b538SAndroid Build Coastguard Worker#include "base/apple/foundation_util.h"
10*6777b538SAndroid Build Coastguard Worker#include "base/files/file_path.h"
11*6777b538SAndroid Build Coastguard Worker#include "base/logging.h"
12*6777b538SAndroid Build Coastguard Worker#include "base/strings/sys_string_conversions.h"
13*6777b538SAndroid Build Coastguard Worker#include "base/threading/scoped_blocking_call.h"
14*6777b538SAndroid Build Coastguard Worker
15*6777b538SAndroid Build Coastguard Workernamespace base::apple {
16*6777b538SAndroid Build Coastguard Worker
17*6777b538SAndroid Build Coastguard Workerbool GetBackupExclusion(const FilePath& file_path) {
18*6777b538SAndroid Build Coastguard Worker  base::ScopedBlockingCall scoped_blocking_call(FROM_HERE,
19*6777b538SAndroid Build Coastguard Worker                                                base::BlockingType::MAY_BLOCK);
20*6777b538SAndroid Build Coastguard Worker
21*6777b538SAndroid Build Coastguard Worker  NSURL* file_url = apple::FilePathToNSURL(file_path);
22*6777b538SAndroid Build Coastguard Worker  DCHECK([file_url checkPromisedItemIsReachableAndReturnError:nil]);
23*6777b538SAndroid Build Coastguard Worker
24*6777b538SAndroid Build Coastguard Worker  NSError* error = nil;
25*6777b538SAndroid Build Coastguard Worker  NSNumber* value = nil;
26*6777b538SAndroid Build Coastguard Worker  BOOL success = [file_url getResourceValue:&value
27*6777b538SAndroid Build Coastguard Worker                                     forKey:NSURLIsExcludedFromBackupKey
28*6777b538SAndroid Build Coastguard Worker                                      error:&error];
29*6777b538SAndroid Build Coastguard Worker  if (!success) {
30*6777b538SAndroid Build Coastguard Worker    LOG(ERROR) << base::SysNSStringToUTF8(error.description);
31*6777b538SAndroid Build Coastguard Worker    return false;
32*6777b538SAndroid Build Coastguard Worker  }
33*6777b538SAndroid Build Coastguard Worker
34*6777b538SAndroid Build Coastguard Worker  return value && value.boolValue;
35*6777b538SAndroid Build Coastguard Worker}
36*6777b538SAndroid Build Coastguard Worker
37*6777b538SAndroid Build Coastguard Workernamespace {
38*6777b538SAndroid Build Coastguard Worker
39*6777b538SAndroid Build Coastguard Workerbool SetBackupState(const FilePath& file_path, bool excluded) {
40*6777b538SAndroid Build Coastguard Worker  base::ScopedBlockingCall scoped_blocking_call(FROM_HERE,
41*6777b538SAndroid Build Coastguard Worker                                                base::BlockingType::MAY_BLOCK);
42*6777b538SAndroid Build Coastguard Worker
43*6777b538SAndroid Build Coastguard Worker  NSURL* file_url = apple::FilePathToNSURL(file_path);
44*6777b538SAndroid Build Coastguard Worker  DCHECK([file_url checkPromisedItemIsReachableAndReturnError:nil]);
45*6777b538SAndroid Build Coastguard Worker
46*6777b538SAndroid Build Coastguard Worker  NSError* error = nil;
47*6777b538SAndroid Build Coastguard Worker  BOOL success = [file_url setResourceValue:@(excluded)
48*6777b538SAndroid Build Coastguard Worker                                     forKey:NSURLIsExcludedFromBackupKey
49*6777b538SAndroid Build Coastguard Worker                                      error:&error];
50*6777b538SAndroid Build Coastguard Worker  LOG_IF(WARNING, !success) << base::SysNSStringToUTF8(error.description);
51*6777b538SAndroid Build Coastguard Worker  return success;
52*6777b538SAndroid Build Coastguard Worker}
53*6777b538SAndroid Build Coastguard Worker
54*6777b538SAndroid Build Coastguard Worker}  // namespace
55*6777b538SAndroid Build Coastguard Worker
56*6777b538SAndroid Build Coastguard Workerbool SetBackupExclusion(const FilePath& file_path) {
57*6777b538SAndroid Build Coastguard Worker  return SetBackupState(file_path, true);
58*6777b538SAndroid Build Coastguard Worker}
59*6777b538SAndroid Build Coastguard Worker
60*6777b538SAndroid Build Coastguard Workerbool ClearBackupExclusion(const FilePath& file_path) {
61*6777b538SAndroid Build Coastguard Worker  return SetBackupState(file_path, false);
62*6777b538SAndroid Build Coastguard Worker}
63*6777b538SAndroid Build Coastguard Worker
64*6777b538SAndroid Build Coastguard Worker}  // namespace base::apple
65