1// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chromeos/chromeos_paths.h"
6
7#include "base/files/file_path.h"
8#include "base/files/file_util.h"
9#include "base/path_service.h"
10#include "base/sys_info.h"
11
12namespace chromeos {
13
14namespace {
15
16const base::FilePath::CharType kDefaultAppOrderFileName[] =
17#if defined(GOOGLE_CHROME_BUILD)
18    FILE_PATH_LITERAL("/usr/share/google-chrome/default_app_order.json");
19#else
20    FILE_PATH_LITERAL("/usr/share/chromium/default_app_order.json");
21#endif  // defined(GOOGLE_CHROME_BUILD)
22
23const base::FilePath::CharType kDefaultUserPolicyKeysDir[] =
24    FILE_PATH_LITERAL("/var/run/user_policy");
25
26const base::FilePath::CharType kOwnerKeyFileName[] =
27    FILE_PATH_LITERAL("/var/lib/whitelist/owner.key");
28
29const base::FilePath::CharType kInstallAttributesFileName[] =
30    FILE_PATH_LITERAL("/var/run/lockbox/install_attributes.pb");
31
32const base::FilePath::CharType kUptimeFileName[] =
33    FILE_PATH_LITERAL("/proc/uptime");
34
35const base::FilePath::CharType kUpdateRebootNeededUptimeFile[] =
36    FILE_PATH_LITERAL("/var/run/chrome/update_reboot_needed_uptime");
37
38const base::FilePath::CharType kDeviceLocalAccountExtensionDir[] =
39    FILE_PATH_LITERAL("/var/cache/device_local_account_extensions");
40
41const base::FilePath::CharType kDeviceLocalAccountExternalDataDir[] =
42    FILE_PATH_LITERAL("/var/cache/device_local_account_external_policy_data");
43
44const base::FilePath::CharType kDeviceLocalAccountComponentPolicy[] =
45    FILE_PATH_LITERAL("/var/cache/device_local_account_component_policy");
46
47bool PathProvider(int key, base::FilePath* result) {
48  switch (key) {
49    case FILE_DEFAULT_APP_ORDER:
50      *result = base::FilePath(kDefaultAppOrderFileName);
51      break;
52    case DIR_USER_POLICY_KEYS:
53      *result = base::FilePath(kDefaultUserPolicyKeysDir);
54      break;
55    case FILE_OWNER_KEY:
56      *result = base::FilePath(kOwnerKeyFileName);
57      break;
58    case FILE_INSTALL_ATTRIBUTES:
59      *result = base::FilePath(kInstallAttributesFileName);
60      break;
61    case FILE_UPTIME:
62      *result = base::FilePath(kUptimeFileName);
63      break;
64    case FILE_UPDATE_REBOOT_NEEDED_UPTIME:
65      *result = base::FilePath(kUpdateRebootNeededUptimeFile);
66      break;
67    case DIR_DEVICE_LOCAL_ACCOUNT_EXTENSIONS:
68      *result = base::FilePath(kDeviceLocalAccountExtensionDir);
69      break;
70    case DIR_DEVICE_LOCAL_ACCOUNT_EXTERNAL_DATA:
71      *result = base::FilePath(kDeviceLocalAccountExternalDataDir);
72      break;
73    case DIR_DEVICE_LOCAL_ACCOUNT_COMPONENT_POLICY:
74      *result = base::FilePath(kDeviceLocalAccountComponentPolicy);
75      break;
76    default:
77      return false;
78  }
79  return true;
80}
81
82}  // namespace
83
84void RegisterPathProvider() {
85  PathService::RegisterProvider(PathProvider, PATH_START, PATH_END);
86}
87
88void RegisterStubPathOverrides(const base::FilePath& stubs_dir) {
89  CHECK(!base::SysInfo::IsRunningOnChromeOS());
90  // Override these paths on the desktop, so that enrollment and cloud
91  // policy work and can be tested.
92  base::FilePath parent = base::MakeAbsoluteFilePath(stubs_dir);
93  PathService::Override(
94      DIR_USER_POLICY_KEYS,
95      parent.AppendASCII("stub_user_policy"));
96  const bool is_absolute = true;
97  const bool create = false;
98  PathService::OverrideAndCreateIfNeeded(
99      FILE_OWNER_KEY,
100      parent.AppendASCII("stub_owner.key"),
101      is_absolute,
102      create);
103  PathService::OverrideAndCreateIfNeeded(
104      FILE_INSTALL_ATTRIBUTES,
105      parent.AppendASCII("stub_install_attributes.pb"),
106      is_absolute,
107      create);
108  PathService::Override(
109      DIR_DEVICE_LOCAL_ACCOUNT_EXTENSIONS,
110      parent.AppendASCII("stub_device_local_account_extensions"));
111  PathService::Override(
112      DIR_DEVICE_LOCAL_ACCOUNT_EXTERNAL_DATA,
113      parent.AppendASCII("stub_device_local_account_external_data"));
114  PathService::Override(
115      DIR_DEVICE_LOCAL_ACCOUNT_COMPONENT_POLICY,
116      parent.AppendASCII("stub_device_local_account_component_policy"));
117}
118
119}  // namespace chromeos
120