summaryrefslogtreecommitdiffstats
path: root/chrome/browser/service/service_process_control_browsertest.cc
diff options
context:
space:
mode:
authorhclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-12 01:07:24 +0000
committerhclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-12 01:07:24 +0000
commit50307586363272bb8b133004889772b4919ad8fd (patch)
treea7e73d040cbd3d846e60570abd68c731f85b3e48 /chrome/browser/service/service_process_control_browsertest.cc
parent7e8a83c5f13b6ed0c5be202f5697efc07cee06ce (diff)
downloadchromium_src-50307586363272bb8b133004889772b4919ad8fd.zip
chromium_src-50307586363272bb8b133004889772b4919ad8fd.tar.gz
chromium_src-50307586363272bb8b133004889772b4919ad8fd.tar.bz2
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
Diffstat (limited to 'chrome/browser/service/service_process_control_browsertest.cc')
-rw-r--r--chrome/browser/service/service_process_control_browsertest.cc70
1 files changed, 70 insertions, 0 deletions
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);