Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1008)

Unified Diff: net/test/spawned_test_server/local_test_server_win.cc

Issue 21537002: Remove hard dependency on bundled python_26 in tests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@glyphcache_20130604
Patch Set: Better comments. Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/test/python_utils.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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();
« no previous file with comments | « net/test/python_utils.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698