xref: /aosp_15_r20/external/cronet/base/scoped_environment_variable_override.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2017 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_SCOPED_ENVIRONMENT_VARIABLE_OVERRIDE_H_
6*6777b538SAndroid Build Coastguard Worker #define BASE_SCOPED_ENVIRONMENT_VARIABLE_OVERRIDE_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include <memory>
9*6777b538SAndroid Build Coastguard Worker #include <string>
10*6777b538SAndroid Build Coastguard Worker 
11*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h"
12*6777b538SAndroid Build Coastguard Worker 
13*6777b538SAndroid Build Coastguard Worker namespace base {
14*6777b538SAndroid Build Coastguard Worker 
15*6777b538SAndroid Build Coastguard Worker class Environment;
16*6777b538SAndroid Build Coastguard Worker 
17*6777b538SAndroid Build Coastguard Worker // Helper class to override |variable_name| environment variable to |value| for
18*6777b538SAndroid Build Coastguard Worker // the lifetime of this class. Upon destruction, the previous value is restored.
19*6777b538SAndroid Build Coastguard Worker class BASE_EXPORT ScopedEnvironmentVariableOverride final {
20*6777b538SAndroid Build Coastguard Worker  public:
21*6777b538SAndroid Build Coastguard Worker   ScopedEnvironmentVariableOverride(const std::string& variable_name,
22*6777b538SAndroid Build Coastguard Worker                                     const std::string& value);
23*6777b538SAndroid Build Coastguard Worker   // Unset the variable.
24*6777b538SAndroid Build Coastguard Worker   explicit ScopedEnvironmentVariableOverride(const std::string& variable_name);
25*6777b538SAndroid Build Coastguard Worker   ScopedEnvironmentVariableOverride(ScopedEnvironmentVariableOverride&&);
26*6777b538SAndroid Build Coastguard Worker   ScopedEnvironmentVariableOverride& operator=(
27*6777b538SAndroid Build Coastguard Worker       ScopedEnvironmentVariableOverride&&);
28*6777b538SAndroid Build Coastguard Worker   ~ScopedEnvironmentVariableOverride();
29*6777b538SAndroid Build Coastguard Worker 
GetEnv()30*6777b538SAndroid Build Coastguard Worker   base::Environment* GetEnv() { return environment_.get(); }
IsOverridden()31*6777b538SAndroid Build Coastguard Worker   bool IsOverridden() { return overridden_; }
32*6777b538SAndroid Build Coastguard Worker 
33*6777b538SAndroid Build Coastguard Worker  private:
34*6777b538SAndroid Build Coastguard Worker   ScopedEnvironmentVariableOverride(const std::string& variable_name,
35*6777b538SAndroid Build Coastguard Worker                                     const std::string& value,
36*6777b538SAndroid Build Coastguard Worker                                     bool unset_var);
37*6777b538SAndroid Build Coastguard Worker   std::unique_ptr<Environment> environment_;
38*6777b538SAndroid Build Coastguard Worker   std::string variable_name_;
39*6777b538SAndroid Build Coastguard Worker   bool overridden_;
40*6777b538SAndroid Build Coastguard Worker   bool was_set_;
41*6777b538SAndroid Build Coastguard Worker   std::string old_value_;
42*6777b538SAndroid Build Coastguard Worker };
43*6777b538SAndroid Build Coastguard Worker 
44*6777b538SAndroid Build Coastguard Worker }  // namespace base
45*6777b538SAndroid Build Coastguard Worker 
46*6777b538SAndroid Build Coastguard Worker #endif  // BASE_SCOPED_ENVIRONMENT_VARIABLE_OVERRIDE_H_
47