| Index: net/test/spawned_test_server/local_test_server_win.cc | 
| diff --git a/net/test/spawned_test_server/local_test_server_win.cc b/net/test/spawned_test_server/local_test_server_win.cc | 
| index fd26483ed477b37698538f1f2b609e7d79b343f2..7a36c489300ac719270ae5112e4a7031c89ee397 100644 | 
| --- a/net/test/spawned_test_server/local_test_server_win.cc | 
| +++ b/net/test/spawned_test_server/local_test_server_win.cc | 
| @@ -10,6 +10,7 @@ | 
| #include "base/base_paths.h" | 
| #include "base/bind.h" | 
| #include "base/command_line.h" | 
| +#include "base/environment.h" | 
| #include "base/files/file_path.h" | 
| #include "base/message_loop/message_loop.h" | 
| #include "base/path_service.h" | 
| @@ -81,6 +82,60 @@ bool ReadData(HANDLE read_fd, HANDLE write_fd, | 
| return true; | 
| } | 
|  | 
| +// Class that sets up a temporary path that includes the supplied path | 
| +// at the end. | 
| +// | 
| +// TODO(bratell): By making this more generic we can possibly reuse | 
| +//                it at other places such as | 
| +//                chrome/common/multi_process_lock_unittest.cc. | 
| +class ScopedPath { | 
| + public: | 
| +  // Constructor which sets up the environment to include the path to | 
| +  // |path_to_add|. | 
| +  explicit ScopedPath(const base::FilePath& path_to_add); | 
| + | 
| +  // Destructor that restores the path that were active when the | 
| +  // object was constructed. | 
| +  ~ScopedPath(); | 
| + | 
| + private: | 
| +  // The PATH environment variable before it was changed or an empty | 
| +  // string if there was no PATH environment variable. | 
| +  std::string old_path_; | 
| + | 
| +  // The helper object that allows us to read and set environment | 
| +  // variables more easily. | 
| +  scoped_ptr<base::Environment> environment_; | 
| + | 
| +  // A flag saying if we have actually modified the environment. | 
| +  bool path_modified_; | 
| + | 
| +  DISALLOW_COPY_AND_ASSIGN(ScopedPath); | 
| +}; | 
| + | 
| +ScopedPath::ScopedPath(const base::FilePath& path_to_add) | 
| +    : environment_(base::Environment::Create()), | 
| +      path_modified_(false) { | 
| +  environment_->GetVar("PATH", &old_path_); | 
| + | 
| +  std::string new_value = old_path_; | 
| +  if (!new_value.empty()) | 
| +    new_value += ";"; | 
| + | 
| +  new_value += WideToUTF8(path_to_add.value()); | 
| + | 
| +  path_modified_ = environment_->SetVar("PATH", new_value); | 
| +} | 
| + | 
| +ScopedPath::~ScopedPath() { | 
| +  if (!path_modified_) | 
| +    return; | 
| +  if (old_path_.empty()) | 
| +    environment_->UnSetVar("PATH"); | 
| +  else | 
| +    environment_->SetVar("PATH", old_path_); | 
| +} | 
| + | 
| }  // namespace | 
|  | 
| namespace net { | 
| @@ -134,6 +189,15 @@ bool LocalTestServer::LaunchPython(const base::FilePath& testserver_path) { | 
| return false; | 
| } | 
|  | 
| +  // Add our internal python to the path so it can be used if there is | 
| +  // no system python. | 
| +  base::FilePath python_dir; | 
| +  if (!PathService::Get(base::DIR_SOURCE_ROOT, &python_dir)) { | 
| +    LOG(ERROR) << "Could not locate source root directory."; | 
| +    return false; | 
| +  } | 
| +  python_dir = python_dir.AppendASCII("third_party").AppendASCII("python_26"); | 
| +  ScopedPath python_path(python_dir); | 
| base::LaunchOptions launch_options; | 
| launch_options.inherit_handles = true; | 
| launch_options.job_handle = job_handle_.Get(); | 
|  |