1 // Copyright (c) 2012 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 #ifndef CHROME_BROWSER_POLICY_POLICY_PATH_PARSER_H_ 6 #define CHROME_BROWSER_POLICY_POLICY_PATH_PARSER_H_ 7 8 #include <string> 9 10 #include "base/files/file_path.h" 11 12 namespace policy { 13 14 namespace path_parser { 15 16 // This function is used to expand the variables in policy strings that 17 // represent paths. The set of supported variables differs between platforms 18 // but generally covers most standard locations that might be needed in the 19 // existing used cases. 20 // All platforms: 21 // ${user_name} - The user that is running Chrome (respects suids). 22 // (example : "johndoe") 23 // ${machine_name} - The machine name possibly with domain (example : 24 // "johnny.cg1.cooldomain.org") 25 // Windows only: 26 // ${documents} - The "Documents" folder for the current user. 27 // (example : "C:\Users\Administrator\Documents") 28 // ${local_app_data} - The Application Data folder for the current user. 29 // (example : "C:\Users\Administrator\AppData\Local") 30 // ${roaming_app_data}- The Roamed AppData folder for the current user. 31 // (example : "C:\Users\Administrator\AppData\Roaming") 32 // ${profile} - The home folder for the current user. 33 // (example : "C:\Users\Administrator") 34 // ${global_app_data} - The system-wide Application Data folder. 35 // (example : "C:\Users\All Users\AppData") 36 // ${program_files} - The "Program Files" folder for the current process. 37 // Depends on whether it is 32 or 64 bit process. 38 // (example : "C:\Program Files (x86)") 39 // ${windows} - The Windows folder 40 // (example : "C:\WINNT" or "C:\Windows") 41 // MacOS only: 42 // ${users} - The folder where users profiles are stored 43 // (example : "/Users") 44 // ${documents} - The "Documents" folder of the current user. 45 // (example : "/Users/johndoe/Documents") 46 // Any non recognized variable is not being translated at all. Variables are 47 // translated only once in every string because for most of these there is no 48 // sense in concatenating them more than once in a single path. 49 base::FilePath::StringType ExpandPathVariables( 50 const base::FilePath::StringType& untranslated_string); 51 52 // A helper function used to read the UserDataDir path policy without relying on 53 // any policy infrastructure. This is required because this policy is needed 54 // much earlier before the PrefService is initialized. 55 // The function will fill |user_data_dir| if the policy "UserDataDir" is set and 56 // leave it intact if the policy is missing. If the policy is set it should 57 // override any manual changes to the profile path the user might have made so 58 // this function should be used to verify no policy is specified whenever the 59 // profile path is not read from the PathService which already takes this into 60 // account. 61 void CheckUserDataDirPolicy(base::FilePath* user_data_dir); 62 63 } // namespace path_parser 64 65 } // namespace policy 66 67 #endif // CHROME_BROWSER_POLICY_POLICY_PATH_PARSER_H_ 68