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

Unified Diff: base/win/scoped_startup_info_ex_unittest.cc

Issue 10765008: Add scoped StartupInfoEx to base. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 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
« no previous file with comments | « base/win/scoped_startup_info_ex.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/win/scoped_startup_info_ex_unittest.cc
===================================================================
--- base/win/scoped_startup_info_ex_unittest.cc (revision 0)
+++ base/win/scoped_startup_info_ex_unittest.cc (revision 0)
@@ -0,0 +1,76 @@
+// Copyright (c) 2012 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 <windows.h>
+
+#include <string>
+
+#include "base/command_line.h"
+#include "base/test/multiprocess_test.h"
+#include "base/win/scoped_handle.h"
+#include "base/win/scoped_process_information.h"
+#include "base/win/scoped_startup_info_ex.h"
+#include "base/win/windows_version.h"
+#include "testing/multiprocess_func_list.h"
+
+const wchar_t kSectionName[] = L"EventTestSection";
+const size_t kSectionSize = 4096;
+
+MULTIPROCESS_TEST_MAIN(FireInheritedEvents) {
+ HANDLE section = ::OpenFileMappingW(PAGE_READWRITE, false, kSectionName);
+ HANDLE* events = reinterpret_cast<HANDLE*>(::MapViewOfFile(section,
+ PAGE_READWRITE, 0, 0, kSectionSize));
+ // This event should not be valid because it wasn't explicitly inherited.
+ if (::SetEvent(events[1]))
+ return -1;
+ // This event should be valid because it was explicitly inherited.
+ if (!::SetEvent(events[0]))
+ return -1;
+
+ return 0;
+}
+
+class ScopedStartupInfoExTest : public base::MultiProcessTest {};
+
+// Verify that only the explicitly specified event is inherited.
+TEST_F(ScopedStartupInfoExTest, InheritStdOut) {
+ if (base::win::GetVersion() < base::win::VERSION_VISTA)
+ return;
+
+ base::win::ScopedProcessInformation process_info;
+ base::win::ScopedStartupInfoEx startup_info;
+
+ HANDLE section = ::CreateFileMappingW(INVALID_HANDLE_VALUE, NULL,
+ PAGE_READWRITE, 0, kSectionSize,
+ kSectionName);
+ ASSERT_TRUE(section);
+
+ HANDLE* events = reinterpret_cast<HANDLE*>(::MapViewOfFile(section,
+ FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, kSectionSize));
+
+ // Make two inheritable events.
+ SECURITY_ATTRIBUTES security_attributes = { sizeof(security_attributes),
+ NULL, true };
+ events[0] = ::CreateEvent(&security_attributes, false, false, NULL);
+ ASSERT_TRUE(events[0]);
+ events[1] = ::CreateEvent(&security_attributes, false, false, NULL);
+ ASSERT_TRUE(events[1]);
+
+ ASSERT_TRUE(startup_info.InitializeProcThreadAttributeList(1));
+ ASSERT_TRUE(startup_info.UpdateProcThreadAttribute(
+ PROC_THREAD_ATTRIBUTE_HANDLE_LIST, &events[0],
+ sizeof(events[0])));
+
+ std::wstring cmd_line =
+ this->MakeCmdLine("FireInheritedEvents", false).GetCommandLineString();
+
+ ASSERT_TRUE(::CreateProcess(NULL, const_cast<wchar_t*>(cmd_line.c_str()),
+ NULL, NULL, true, EXTENDED_STARTUPINFO_PRESENT,
+ NULL, NULL, startup_info.startup_info(),
+ process_info.Receive())) << ::GetLastError();
+ // Only the first event should be signalled
+ EXPECT_EQ(WAIT_OBJECT_0, ::WaitForMultipleObjects(2, events, false,
+ 4000));
+}
+
Property changes on: base\win\scoped_startup_info_ex_unittest.cc
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « base/win/scoped_startup_info_ex.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698