// Copyright 2017 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef BASE_SCOPED_ENVIRONMENT_VARIABLE_OVERRIDE_H_ #define BASE_SCOPED_ENVIRONMENT_VARIABLE_OVERRIDE_H_ #include #include #include "base/base_export.h" namespace base { class Environment; // Helper class to override |variable_name| environment variable to |value| for // the lifetime of this class. Upon destruction, the previous value is restored. class BASE_EXPORT ScopedEnvironmentVariableOverride final { public: ScopedEnvironmentVariableOverride(const std::string& variable_name, const std::string& value); // Unset the variable. explicit ScopedEnvironmentVariableOverride(const std::string& variable_name); ScopedEnvironmentVariableOverride(ScopedEnvironmentVariableOverride&&); ScopedEnvironmentVariableOverride& operator=( ScopedEnvironmentVariableOverride&&); ~ScopedEnvironmentVariableOverride(); base::Environment* GetEnv() { return environment_.get(); } bool IsOverridden() { return overridden_; } bool WasSet() { return was_set_; } private: ScopedEnvironmentVariableOverride(const std::string& variable_name, const std::string& value, bool unset_var); std::unique_ptr environment_; std::string variable_name_; bool overridden_; bool was_set_; std::string old_value_; }; } // namespace base #endif // BASE_SCOPED_ENVIRONMENT_VARIABLE_OVERRIDE_H_