|  | // 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/test/scoped_environment_variable_override.h" | 
|  |  | 
|  | #include "base/environment.h" | 
|  |  | 
|  | namespace base { | 
|  | namespace test { | 
|  |  | 
|  | ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride( | 
|  | const std::string& variable_name, | 
|  | const std::string& value) | 
|  | : environment_(Environment::Create()), | 
|  | variable_name_(variable_name), | 
|  | overridden_(false), | 
|  | was_set_(false) { | 
|  | was_set_ = environment_->GetVar(variable_name, &old_value_); | 
|  | overridden_ = environment_->SetVar(variable_name, value); | 
|  | } | 
|  |  | 
|  | ScopedEnvironmentVariableOverride::~ScopedEnvironmentVariableOverride() { | 
|  | if (overridden_) { | 
|  | if (was_set_) | 
|  | environment_->SetVar(variable_name_, old_value_); | 
|  | else | 
|  | environment_->UnSetVar(variable_name_); | 
|  | } | 
|  | } | 
|  |  | 
|  | }  // namespace test | 
|  | }  // namespace base |