From 50307586363272bb8b133004889772b4919ad8fd Mon Sep 17 00:00:00 2001 From: "hclam@chromium.org" Date: Thu, 12 Aug 2010 01:07:24 +0000 Subject: ServiceProcessControl to launch a service process and communicate through IPC. Added two class for use with service process: ServiceProcessControl Used by the browser to launch and connect to the service process, also used to receive messages from the service process. ServiceProcessControlManager A singleton to manage multiple ServicProcessControl. BUG=50244 TEST=browser_tests --gtest_filter=ServiceProcess* Review URL: http://codereview.chromium.org/3032061 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@55826 0039d316-1c4b-4281-b951-d872f2087c98 --- .../service/service_process_control_browsertest.cc | 70 ++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 chrome/browser/service/service_process_control_browsertest.cc (limited to 'chrome/browser/service/service_process_control_browsertest.cc') diff --git a/chrome/browser/service/service_process_control_browsertest.cc b/chrome/browser/service/service_process_control_browsertest.cc new file mode 100644 index 0000000..0dda5fa --- /dev/null +++ b/chrome/browser/service/service_process_control_browsertest.cc @@ -0,0 +1,70 @@ +// Copyright (c) 2010 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 "chrome/test/in_process_browser_test.h" +#include "chrome/test/ui_test_utils.h" +#include "chrome/browser/browser.h" +#include "chrome/browser/service/service_process_control.h" +#include "chrome/browser/service/service_process_control_manager.h" +#include "chrome/common/service_process_type.h" + +class ServiceProcessControlBrowserTest + : public InProcessBrowserTest, + public ServiceProcessControl::MessageHandler { + protected: + void LaunchServiceProcessControl() { + ServiceProcessControl* process = + ServiceProcessControlManager::instance()->GetProcessControl( + browser()->profile(), kServiceProcessCloudPrint); + process_ = process; + + // Launch the process asynchronously. + process->Launch( + NewRunnableMethod( + this, + &ServiceProcessControlBrowserTest::ProcessControlLaunched)); + + // Then run the message loop to keep things running. + ui_test_utils::RunMessageLoop(); + } + + void SayHelloAndWait() { + // Send a hello message to the service process and wait for a reply. + process()->SendHello(); + ui_test_utils::RunMessageLoop(); + } + + void ProcessControlLaunched() { + process()->SetMessageHandler(this); + // Quit the current message. + MessageLoop::current()->Quit(); + } + + // ServiceProcessControl::MessageHandler implementations. + virtual void OnGoodDay() { + MessageLoop::current()->Quit(); + } + + ServiceProcessControl* process() { return process_; } + + private: + ServiceProcessControl* process_; +}; + +#if defined(OS_WIN) +// They way that the IPC is implemented only works on windows. This has to +// change when we implement a different scheme for IPC. +IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, LaunchAndIPC) { + LaunchServiceProcessControl(); + + // Make sure we are connected to the service process. + EXPECT_TRUE(process()->is_connected()); + SayHelloAndWait(); + + // And then shutdown the service process. + EXPECT_TRUE(process()->Shutdown()); +} +#endif + +DISABLE_RUNNABLE_METHOD_REFCOUNT(ServiceProcessControlBrowserTest); -- cgit v1.1