xref: /aosp_15_r20/external/cronet/base/base_paths_ios.mm (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker// Copyright 2023 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// Defines base::PathProviderIOS which replaces base::PathProviderPosix for iOS
6*6777b538SAndroid Build Coastguard Worker// in base/path_service.cc.
7*6777b538SAndroid Build Coastguard Worker
8*6777b538SAndroid Build Coastguard Worker#import <Foundation/Foundation.h>
9*6777b538SAndroid Build Coastguard Worker
10*6777b538SAndroid Build Coastguard Worker#include "base/apple/bundle_locations.h"
11*6777b538SAndroid Build Coastguard Worker#include "base/apple/foundation_util.h"
12*6777b538SAndroid Build Coastguard Worker#include "base/base_paths.h"
13*6777b538SAndroid Build Coastguard Worker#include "base/base_paths_apple.h"
14*6777b538SAndroid Build Coastguard Worker#include "base/files/file_path.h"
15*6777b538SAndroid Build Coastguard Worker#include "base/files/file_util.h"
16*6777b538SAndroid Build Coastguard Worker#include "base/path_service.h"
17*6777b538SAndroid Build Coastguard Worker
18*6777b538SAndroid Build Coastguard Workernamespace base {
19*6777b538SAndroid Build Coastguard Worker
20*6777b538SAndroid Build Coastguard Workerbool PathProviderIOS(int key, base::FilePath* result) {
21*6777b538SAndroid Build Coastguard Worker  switch (key) {
22*6777b538SAndroid Build Coastguard Worker    case base::FILE_EXE:
23*6777b538SAndroid Build Coastguard Worker      *result = base::apple::internal::GetExecutablePath();
24*6777b538SAndroid Build Coastguard Worker      return true;
25*6777b538SAndroid Build Coastguard Worker
26*6777b538SAndroid Build Coastguard Worker    case base::DIR_APP_DATA: {
27*6777b538SAndroid Build Coastguard Worker      base::FilePath path;
28*6777b538SAndroid Build Coastguard Worker      if (!base::apple::GetUserDirectory(NSApplicationSupportDirectory,
29*6777b538SAndroid Build Coastguard Worker                                         &path)) {
30*6777b538SAndroid Build Coastguard Worker        return false;
31*6777b538SAndroid Build Coastguard Worker      }
32*6777b538SAndroid Build Coastguard Worker
33*6777b538SAndroid Build Coastguard Worker      // On iOS, this directory does not exist unless it is created explicitly.
34*6777b538SAndroid Build Coastguard Worker      if (!base::PathExists(path) && !base::CreateDirectory(path)) {
35*6777b538SAndroid Build Coastguard Worker        return false;
36*6777b538SAndroid Build Coastguard Worker      }
37*6777b538SAndroid Build Coastguard Worker
38*6777b538SAndroid Build Coastguard Worker      *result = path;
39*6777b538SAndroid Build Coastguard Worker      return true;
40*6777b538SAndroid Build Coastguard Worker    }
41*6777b538SAndroid Build Coastguard Worker
42*6777b538SAndroid Build Coastguard Worker    case base::DIR_SRC_TEST_DATA_ROOT:
43*6777b538SAndroid Build Coastguard Worker    case base::DIR_OUT_TEST_DATA_ROOT:
44*6777b538SAndroid Build Coastguard Worker      // On iOS, there is no access to source root, nor build dir,
45*6777b538SAndroid Build Coastguard Worker      // however, the necessary resources are packaged into the
46*6777b538SAndroid Build Coastguard Worker      // test app as assets.
47*6777b538SAndroid Build Coastguard Worker      [[fallthrough]];
48*6777b538SAndroid Build Coastguard Worker
49*6777b538SAndroid Build Coastguard Worker    case base::DIR_ASSETS:
50*6777b538SAndroid Build Coastguard Worker      // On iOS, the resources are located at the root of the framework bundle.
51*6777b538SAndroid Build Coastguard Worker      *result = base::apple::FrameworkBundlePath();
52*6777b538SAndroid Build Coastguard Worker#if BUILDFLAG(IS_IOS_MACCATALYST)
53*6777b538SAndroid Build Coastguard Worker      // When running in the catalyst environment (i.e. building an iOS app
54*6777b538SAndroid Build Coastguard Worker      // to run on macOS), the bundles have the same structure as macOS, so
55*6777b538SAndroid Build Coastguard Worker      // the resources are in the "Contents/Resources" sub-directory.
56*6777b538SAndroid Build Coastguard Worker      *result = result->Append(FILE_PATH_LITERAL("Contents"))
57*6777b538SAndroid Build Coastguard Worker                    .Append(FILE_PATH_LITERAL("Resources"));
58*6777b538SAndroid Build Coastguard Worker#endif  // BUILDFLAG(IS_IOS_MACCATALYST)
59*6777b538SAndroid Build Coastguard Worker      return true;
60*6777b538SAndroid Build Coastguard Worker
61*6777b538SAndroid Build Coastguard Worker    case base::DIR_CACHE:
62*6777b538SAndroid Build Coastguard Worker      return base::apple::GetUserDirectory(NSCachesDirectory, result);
63*6777b538SAndroid Build Coastguard Worker
64*6777b538SAndroid Build Coastguard Worker    default:
65*6777b538SAndroid Build Coastguard Worker      return false;
66*6777b538SAndroid Build Coastguard Worker  }
67*6777b538SAndroid Build Coastguard Worker}
68*6777b538SAndroid Build Coastguard Worker
69*6777b538SAndroid Build Coastguard Worker}  // namespace base
70