diff options
Diffstat (limited to 'chrome/common/service_process_util_unittest.cc')
-rw-r--r-- | chrome/common/service_process_util_unittest.cc | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/chrome/common/service_process_util_unittest.cc b/chrome/common/service_process_util_unittest.cc index eadf51f..03827e0 100644 --- a/chrome/common/service_process_util_unittest.cc +++ b/chrome/common/service_process_util_unittest.cc @@ -8,15 +8,28 @@ // TODO(dmaclach): Figure out tests that will work with launchd on Mac OS. #include "base/at_exit.h" +#include "base/command_line.h" #include "base/process_util.h" +#include "base/scoped_ptr.h" #include "base/string_util.h" #include "base/test/multiprocess_test.h" #include "base/test/test_timeouts.h" #include "base/threading/thread.h" +#include "base/utf_string_conversions.h" +#include "chrome/common/chrome_switches.h" #include "chrome/common/chrome_version_info.h" #include "chrome/common/service_process_util.h" #include "testing/multiprocess_func_list.h" +#if defined(OS_WIN) +#include "base/win/win_util.h" +#endif + +#if defined(OS_LINUX) +#include <glib.h> +#include "chrome/common/auto_start_linux.h" +#endif + namespace { bool g_good_shutdown = false; @@ -91,6 +104,52 @@ TEST_F(ServiceProcessStateTest, ReadyState) { LaunchAndWait("ServiceProcessStateTestReadyFalse"); } +TEST_F(ServiceProcessStateTest, AutoRun) { + ServiceProcessState* state = ServiceProcessState::GetInstance(); + ASSERT_TRUE(state->AddToAutoRun()); + scoped_ptr<CommandLine> autorun_command_line; +#if defined(OS_WIN) + std::string value_name = GetServiceProcessScopedName("_service_run"); + string16 value; + EXPECT_TRUE(base::win::ReadCommandFromAutoRun(HKEY_CURRENT_USER, + UTF8ToWide(value_name), + &value)); + autorun_command_line.reset(new CommandLine(CommandLine::FromString(value))); +#elif defined(OS_LINUX) +#if defined(GOOGLE_CHROME_BUILD) + std::string base_desktop_name = "google-chrome-service.desktop"; +#else // CHROMIUM_BUILD + std::string base_desktop_name = "chromium-service.desktop"; +#endif + std::string exec_value; + EXPECT_TRUE(AutoStart::GetAutostartFileValue( + GetServiceProcessScopedName(base_desktop_name), "Exec", &exec_value)); + GError *error = NULL; + gchar **argv = NULL; + gint argc = NULL; + if (g_shell_parse_argv(exec_value.c_str(), &argc, &argv, &error)) { + autorun_command_line.reset(new CommandLine(argc, argv)); + g_strfreev(argv); + } else { + ADD_FAILURE(); + g_error_free(error); + } +#endif // defined(OS_WIN) + if (autorun_command_line.get()) { + EXPECT_EQ(autorun_command_line->GetSwitchValueASCII(switches::kProcessType), + std::string(switches::kServiceProcess)); + } + ASSERT_TRUE(state->RemoveFromAutoRun()); +#if defined(OS_WIN) + EXPECT_FALSE(base::win::ReadCommandFromAutoRun(HKEY_CURRENT_USER, + UTF8ToWide(value_name), + &value)); +#elif defined(OS_LINUX) + EXPECT_FALSE(AutoStart::GetAutostartFileValue( + GetServiceProcessScopedName(base_desktop_name), "Exec", &exec_value)); +#endif // defined(OS_WIN) +} + TEST_F(ServiceProcessStateTest, SharedMem) { std::string version; base::ProcessId pid; |