1*6777b538SAndroid Build Coastguard Worker // Copyright 2011 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 #ifndef BASE_ENVIRONMENT_H_ 6*6777b538SAndroid Build Coastguard Worker #define BASE_ENVIRONMENT_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <map> 9*6777b538SAndroid Build Coastguard Worker #include <memory> 10*6777b538SAndroid Build Coastguard Worker #include <string> 11*6777b538SAndroid Build Coastguard Worker #include <string_view> 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h" 14*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h" 15*6777b538SAndroid Build Coastguard Worker 16*6777b538SAndroid Build Coastguard Worker namespace base { 17*6777b538SAndroid Build Coastguard Worker 18*6777b538SAndroid Build Coastguard Worker namespace env_vars { 19*6777b538SAndroid Build Coastguard Worker 20*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) 21*6777b538SAndroid Build Coastguard Worker BASE_EXPORT extern const char kHome[]; 22*6777b538SAndroid Build Coastguard Worker #endif 23*6777b538SAndroid Build Coastguard Worker 24*6777b538SAndroid Build Coastguard Worker } // namespace env_vars 25*6777b538SAndroid Build Coastguard Worker 26*6777b538SAndroid Build Coastguard Worker class BASE_EXPORT Environment { 27*6777b538SAndroid Build Coastguard Worker public: 28*6777b538SAndroid Build Coastguard Worker virtual ~Environment(); 29*6777b538SAndroid Build Coastguard Worker 30*6777b538SAndroid Build Coastguard Worker // Returns the appropriate platform-specific instance. 31*6777b538SAndroid Build Coastguard Worker static std::unique_ptr<Environment> Create(); 32*6777b538SAndroid Build Coastguard Worker 33*6777b538SAndroid Build Coastguard Worker // Gets an environment variable's value and stores it in |result|. 34*6777b538SAndroid Build Coastguard Worker // Returns false if the key is unset. 35*6777b538SAndroid Build Coastguard Worker virtual bool GetVar(std::string_view variable_name, std::string* result) = 0; 36*6777b538SAndroid Build Coastguard Worker 37*6777b538SAndroid Build Coastguard Worker // Syntactic sugar for GetVar(variable_name, nullptr); 38*6777b538SAndroid Build Coastguard Worker virtual bool HasVar(std::string_view variable_name); 39*6777b538SAndroid Build Coastguard Worker 40*6777b538SAndroid Build Coastguard Worker // Returns true on success, otherwise returns false. This method should not 41*6777b538SAndroid Build Coastguard Worker // be called in a multi-threaded process. 42*6777b538SAndroid Build Coastguard Worker virtual bool SetVar(std::string_view variable_name, 43*6777b538SAndroid Build Coastguard Worker const std::string& new_value) = 0; 44*6777b538SAndroid Build Coastguard Worker 45*6777b538SAndroid Build Coastguard Worker // Returns true on success, otherwise returns false. This method should not 46*6777b538SAndroid Build Coastguard Worker // be called in a multi-threaded process. 47*6777b538SAndroid Build Coastguard Worker virtual bool UnSetVar(std::string_view variable_name) = 0; 48*6777b538SAndroid Build Coastguard Worker }; 49*6777b538SAndroid Build Coastguard Worker 50*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_WIN) 51*6777b538SAndroid Build Coastguard Worker using NativeEnvironmentString = std::wstring; 52*6777b538SAndroid Build Coastguard Worker #elif BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) 53*6777b538SAndroid Build Coastguard Worker using NativeEnvironmentString = std::string; 54*6777b538SAndroid Build Coastguard Worker #endif 55*6777b538SAndroid Build Coastguard Worker using EnvironmentMap = 56*6777b538SAndroid Build Coastguard Worker std::map<NativeEnvironmentString, NativeEnvironmentString>; 57*6777b538SAndroid Build Coastguard Worker 58*6777b538SAndroid Build Coastguard Worker } // namespace base 59*6777b538SAndroid Build Coastguard Worker 60*6777b538SAndroid Build Coastguard Worker #endif // BASE_ENVIRONMENT_H_ 61