blob: 916e897c563159496750f27126a527e05c7629f5 [file] [log] [blame]
Julien Brianceau9dcfeee2017-07-29 14:18:151// Copyright 2017 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
Maksim Sisov24d31b62021-11-11 08:09:365#ifndef BASE_SCOPED_ENVIRONMENT_VARIABLE_OVERRIDE_H_
6#define BASE_SCOPED_ENVIRONMENT_VARIABLE_OVERRIDE_H_
Julien Brianceau9dcfeee2017-07-29 14:18:157
8#include <memory>
9#include <string>
10
Maksim Sisov24d31b62021-11-11 08:09:3611#include "base/base_export.h"
12
Julien Brianceau9dcfeee2017-07-29 14:18:1513namespace base {
14
15class Environment;
16
Julien Brianceau9dcfeee2017-07-29 14:18:1517// Helper class to override |variable_name| environment variable to |value| for
18// the lifetime of this class. Upon destruction, the previous value is restored.
Maksim Sisov24d31b62021-11-11 08:09:3619class BASE_EXPORT ScopedEnvironmentVariableOverride final {
Julien Brianceau9dcfeee2017-07-29 14:18:1520 public:
21 ScopedEnvironmentVariableOverride(const std::string& variable_name,
22 const std::string& value);
Sven Zheng416d1fd2020-11-10 01:15:5723 // Unset the variable.
24 explicit ScopedEnvironmentVariableOverride(const std::string& variable_name);
Maksim Sisov24d31b62021-11-11 08:09:3625 ScopedEnvironmentVariableOverride(ScopedEnvironmentVariableOverride&&);
26 ScopedEnvironmentVariableOverride& operator=(
27 ScopedEnvironmentVariableOverride&&);
Julien Brianceau9dcfeee2017-07-29 14:18:1528 ~ScopedEnvironmentVariableOverride();
29
30 base::Environment* GetEnv() { return environment_.get(); }
31 bool IsOverridden() { return overridden_; }
32 bool WasSet() { return was_set_; }
33
34 private:
Sven Zheng416d1fd2020-11-10 01:15:5735 ScopedEnvironmentVariableOverride(const std::string& variable_name,
36 const std::string& value,
37 bool unset_var);
Julien Brianceau9dcfeee2017-07-29 14:18:1538 std::unique_ptr<Environment> environment_;
39 std::string variable_name_;
40 bool overridden_;
41 bool was_set_;
42 std::string old_value_;
43};
44
Julien Brianceau9dcfeee2017-07-29 14:18:1545} // namespace base
46
Maksim Sisov24d31b62021-11-11 08:09:3647#endif // BASE_SCOPED_ENVIRONMENT_VARIABLE_OVERRIDE_H_