ozone: move ScopedEnvironmentVariableOverride to base
This is handy class can also be used outside tests
to temporarily reset env variables or override
them with something else. Thus, make it available
outside test.
Bug: 1096425
Change-Id: I34e31c8384c5ab09db78aa8aa7d9a96c441ac5e9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3268070
Reviewed-by: Clark DuVall <[email protected]>
Reviewed-by: Avi Drissman <[email protected]>
Reviewed-by: Daniel Cheng <[email protected]>
Commit-Queue: Maksim Sisov <[email protected]>
Cr-Commit-Position: refs/heads/main@{#940692}
diff --git a/base/scoped_environment_variable_override.cc b/base/scoped_environment_variable_override.cc
new file mode 100644
index 0000000..8c3e3e05
--- /dev/null
+++ b/base/scoped_environment_variable_override.cc
@@ -0,0 +1,50 @@
+// 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.
+
+#include "base/scoped_environment_variable_override.h"
+
+#include "base/environment.h"
+
+namespace base {
+
+ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride(
+ const std::string& variable_name,
+ const std::string& value,
+ bool unset_var)
+ : environment_(Environment::Create()),
+ variable_name_(variable_name),
+ overridden_(false),
+ was_set_(false) {
+ was_set_ = environment_->GetVar(variable_name, &old_value_);
+ if (unset_var)
+ overridden_ = environment_->UnSetVar(variable_name);
+ else
+ overridden_ = environment_->SetVar(variable_name, value);
+}
+
+ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride(
+ const std::string& variable_name,
+ const std::string& value)
+ : ScopedEnvironmentVariableOverride(variable_name, value, false) {}
+
+ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride(
+ const std::string& variable_name)
+ : ScopedEnvironmentVariableOverride(variable_name, "", true) {}
+
+ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride(
+ ScopedEnvironmentVariableOverride&&) = default;
+
+ScopedEnvironmentVariableOverride& ScopedEnvironmentVariableOverride::operator=(
+ ScopedEnvironmentVariableOverride&&) = default;
+
+ScopedEnvironmentVariableOverride::~ScopedEnvironmentVariableOverride() {
+ if (overridden_) {
+ if (was_set_)
+ environment_->SetVar(variable_name_, old_value_);
+ else
+ environment_->UnSetVar(variable_name_);
+ }
+}
+
+} // namespace base