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

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: Created 7 years, 5 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
« net/test/python_utils.cc ('K') | « 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..4958d40ec3bc558c286ce6c66b89141817833793 100644
--- a/net/test/spawned_test_server/local_test_server_win.cc
+++ b/net/test/spawned_test_server/local_test_server_win.cc
@@ -85,6 +85,80 @@ bool ReadData(HANDLE read_fd, HANDLE write_fd,
namespace net {
+class AddedPythonPath {
+private:
+ bool path_modified_;
+ LPTSTR old_path_;
+
+public:
+ AddedPythonPath();
+ ~AddedPythonPath();
+};
+
+AddedPythonPath::AddedPythonPath() : path_modified_(false), old_path_(NULL) {
Paweł Hajdan Jr. 2013/08/01 17:56:28 Could you reuse ScopedEnvironmentVariable from e.g
Daniel Bratell 2013/08/02 07:27:53 I took a look at it and it has slightly different
Paweł Hajdan Jr. 2013/08/19 19:16:55 Let's make the version you created for this purpos
+ // Retrieves the old path, adds third_party/python26 to the end of it and
+ // then restores the original path in the destructor.
+
+ DWORD result = GetEnvironmentVariable(TEXT("PATH"), NULL, 0);
+ if (result == 0 && GetLastError() != ERROR_ENVVAR_NOT_FOUND)
+ return;
+
+ if (result != 0) {
+ old_path_ = new TCHAR[result];
Paweł Hajdan Jr. 2013/08/01 17:56:28 We generally avoid using TCHAR, TEXT, and LPTSTR d
+ if (!old_path_)
+ return;
+
+ result = GetEnvironmentVariable(TEXT("PATH"), old_path_, result);
+ if (result == 0) {
+ // PATH Variable has disappeared or something went wrong in Windows.
+ // We just do nothing.
+ return;
+ }
+ }
+
+ base::FilePath dir;
+ if (!PathService::Get(base::DIR_SOURCE_ROOT, &dir))
+ return;
+ dir = dir.Append(FILE_PATH_LITERAL("third_party"))
+ .Append(FILE_PATH_LITERAL("python_26"));
+
+ base::string16 new_path = dir.AsUTF16Unsafe();
+
+ size_t new_value_len = new_path.length() + 1;
+ if (old_path_) {
+ new_value_len += 1 + wcslen(old_path_);
+ }
+
+ LPTSTR new_value = new TCHAR[new_value_len];
+ if (!new_value)
+ return;
+
+ if (old_path_) {
+ wcscpy(new_value, old_path_);
+ wcscat(new_value, TEXT(";")); // Add separator
+ }
+ else
+ new_value[0] = '\0';
+
+ // Add new path to the end so system pythons are used if available.
+ wcscat(new_value, new_path.c_str());
+ result = SetEnvironmentVariable(TEXT("PATH"), new_value);
+ delete[] new_value;
+ if (result == 0)
+ return;
+ path_modified_ = true;
+}
+
+AddedPythonPath::~AddedPythonPath() {
+ if (path_modified_) {
+ // old_path_ can be NULL in which case the variable will be
+ // removed. That is what we want.
+ (void)SetEnvironmentVariable(TEXT("PATH"), old_path_);
+ }
+
+ delete[] old_path_;
+}
+
bool LocalTestServer::LaunchPython(const base::FilePath& testserver_path) {
CommandLine python_command(CommandLine::NO_PROGRAM);
if (!GetPythonCommand(&python_command))
@@ -134,6 +208,7 @@ bool LocalTestServer::LaunchPython(const base::FilePath& testserver_path) {
return false;
}
+ AddedPythonPath python_path;
base::LaunchOptions launch_options;
launch_options.inherit_handles = true;
launch_options.job_handle = job_handle_.Get();
« net/test/python_utils.cc ('K') | « net/test/python_utils.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698