summaryrefslogtreecommitdiffstats
path: root/chrome/test/out_of_proc_test_runner.cc
diff options
context:
space:
mode:
authorpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-07 18:49:09 +0000
committerpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-07 18:49:09 +0000
commit517617476b7231f63b2f900d9dc825db2ee4161d (patch)
treea09d1e81c9796b0859a01dfc467710724046e8ce /chrome/test/out_of_proc_test_runner.cc
parentd91ddfc676314764d240a9ad0da06063bb265d76 (diff)
downloadchromium_src-517617476b7231f63b2f900d9dc825db2ee4161d.zip
chromium_src-517617476b7231f63b2f900d9dc825db2ee4161d.tar.gz
chromium_src-517617476b7231f63b2f900d9dc825db2ee4161d.tar.bz2
Make the windows_version.h functions threadsafe by using a singleton. Add accessors to the singleton for more values that various code wants, then convert almost everyone using OSVERSIONINFO or SYSTEM_INFO structs to calling these accessors. Declare an AtExitManager in the out-of-process test runner since it didn't have one and that breaks singleton-using code in the test executable (as opposed to in chrome.dll).
A few other minor cleanups along the way (binding of "*", shorter code, etc.). Because I ran into problems with it while modifying gcapi.cc, I cleaned up our usage of strsafe.h a bit, so that files that don't need it don't include it and files that do use STRSAFE_NO_DEPRECATE instead of a modified #include order. BUG=none TEST=none Review URL: http://codereview.chromium.org/6713107 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@80819 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/test/out_of_proc_test_runner.cc')
-rw-r--r--chrome/test/out_of_proc_test_runner.cc12
1 files changed, 12 insertions, 0 deletions
diff --git a/chrome/test/out_of_proc_test_runner.cc b/chrome/test/out_of_proc_test_runner.cc
index 6e4bc3b..5d23954 100644
--- a/chrome/test/out_of_proc_test_runner.cc
+++ b/chrome/test/out_of_proc_test_runner.cc
@@ -579,6 +579,18 @@ int main(int argc, char** argv) {
return ChromeTestSuite(argc, argv).Run();
}
+ // The exit manager is in charge of calling the dtors of singleton objects.
+ // On Windows, the call to ChromeMain() below will construct one for the
+ // chrome.dll module, but that global is not shared with this module, so if
+ // chrome.dll calls back out to this module and the called code uses a
+ // singleton, we'll need this. On other platforms, ChromeMain() isn't called
+ // at all below, so this is the lone exit manager for any code after this
+ // point.
+ // NOTE: We can't init this atop main() because ChromeTestSuite, as a subclass
+ // of TestSuite, creates one. So we wait until after the Run() call above to
+ // create the manager for the code path that _doesn't_ use ChromeTestSuite.
+ base::AtExitManager exit_manager;
+
#if defined(OS_WIN)
if (command_line->HasSwitch(switches::kProcessType)) {
// This is a child process, call ChromeMain.