Index: chrome/browser/service_process/service_process_control_browsertest.cc |
diff --git a/chrome/browser/service_process/service_process_control_browsertest.cc b/chrome/browser/service_process/service_process_control_browsertest.cc |
index a15ed69cf467120a9a73845dbbf8cf0c79ddc284..9a07250152f61dbd01a6721f5f24e3ec093ce5e9 100644 |
--- a/chrome/browser/service_process/service_process_control_browsertest.cc |
+++ b/chrome/browser/service_process/service_process_control_browsertest.cc |
@@ -18,6 +18,7 @@ |
#include "build/build_config.h" |
#include "chrome/browser/ui/browser.h" |
#include "chrome/common/chrome_constants.h" |
+#include "chrome/common/service_messages.h" |
#include "chrome/common/service_process_util.h" |
#include "chrome/test/base/in_process_browser_test.h" |
#include "components/version_info/version_info.h" |
@@ -42,7 +43,7 @@ class ServiceProcessControlBrowserTest |
MOCK_METHOD0(MockHistogramsCallback, void()); |
protected: |
- void LaunchServiceProcessControl() { |
+ void LaunchServiceProcessControl(bool wait) { |
// Launch the process asynchronously. |
ServiceProcessControl::GetInstance()->Launch( |
base::Bind(&ServiceProcessControlBrowserTest::ProcessControlLaunched, |
@@ -52,7 +53,8 @@ class ServiceProcessControlBrowserTest |
base::Unretained(this))); |
// Then run the message loop to keep things running. |
- content::RunMessageLoop(); |
+ if (wait) |
+ content::RunMessageLoop(); |
} |
static void QuitMessageLoop() { |
@@ -146,7 +148,7 @@ class RealServiceProcessControlBrowserTest |
// TODO(vitalybuka): Fix crbug.com/340563 |
IN_PROC_BROWSER_TEST_F(RealServiceProcessControlBrowserTest, |
DISABLED_LaunchAndIPC) { |
- LaunchServiceProcessControl(); |
+ LaunchServiceProcessControl(true); |
// Make sure we are connected to the service process. |
ASSERT_TRUE(ServiceProcessControl::GetInstance()->IsConnected()); |
@@ -159,7 +161,7 @@ IN_PROC_BROWSER_TEST_F(RealServiceProcessControlBrowserTest, |
} |
IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, LaunchAndIPC) { |
- LaunchServiceProcessControl(); |
+ LaunchServiceProcessControl(true); |
// Make sure we are connected to the service process. |
ASSERT_TRUE(ServiceProcessControl::GetInstance()->IsConnected()); |
@@ -171,6 +173,33 @@ IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, LaunchAndIPC) { |
EXPECT_TRUE(ServiceProcessControl::GetInstance()->Shutdown()); |
} |
+IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, LaunchAndReconnect) { |
+ LaunchServiceProcessControl(true); |
+ |
+ // Make sure we are connected to the service process. |
+ ASSERT_TRUE(ServiceProcessControl::GetInstance()->IsConnected()); |
+ // Send an IPC that will keep the service process alive after we disconnect. |
+ ServiceProcessControl::GetInstance()->Send( |
+ new ServiceMsg_EnableCloudPrintProxyWithRobot( |
+ "", "", "", base::DictionaryValue())); |
+ ServiceProcessControl::GetInstance()->GetCloudPrintProxyInfo( |
+ base::Bind(&ServiceProcessControlBrowserTest::CloudPrintInfoCallback)); |
+ content::RunMessageLoop(); |
+ Disconnect(); |
+ |
+ LaunchServiceProcessControl(false); |
+ |
+ ASSERT_TRUE(ServiceProcessControl::GetInstance()->IsConnected()); |
+ content::RunMessageLoop(); |
+ |
+ ServiceProcessControl::GetInstance()->GetCloudPrintProxyInfo( |
+ base::Bind(&ServiceProcessControlBrowserTest::CloudPrintInfoCallback)); |
+ content::RunMessageLoop(); |
+ |
+ // And then shutdown the service process. |
+ EXPECT_TRUE(ServiceProcessControl::GetInstance()->Shutdown()); |
+} |
+ |
// This tests the case when a service process is launched when the browser |
// starts but we try to launch it again while setting up Cloud Print. |
// Flaky on Mac. http://crbug.com/517420 |
@@ -181,7 +210,7 @@ IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, LaunchAndIPC) { |
#endif |
IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, MAYBE_LaunchTwice) { |
// Launch the service process the first time. |
- LaunchServiceProcessControl(); |
+ LaunchServiceProcessControl(true); |
// Make sure we are connected to the service process. |
ASSERT_TRUE(ServiceProcessControl::GetInstance()->IsConnected()); |
@@ -190,7 +219,7 @@ IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, MAYBE_LaunchTwice) { |
content::RunMessageLoop(); |
// Launch the service process again. |
- LaunchServiceProcessControl(); |
+ LaunchServiceProcessControl(true); |
ASSERT_TRUE(ServiceProcessControl::GetInstance()->IsConnected()); |
EXPECT_TRUE(ServiceProcessControl::GetInstance()->GetCloudPrintProxyInfo( |
base::Bind(&ServiceProcessControlBrowserTest::CloudPrintInfoCallback))); |
@@ -257,7 +286,7 @@ IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, MAYBE_SameLaunchTask) { |
IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, |
MAYBE_DieOnDisconnect) { |
// Launch the service process. |
- LaunchServiceProcessControl(); |
+ LaunchServiceProcessControl(true); |
// Make sure we are connected to the service process. |
ASSERT_TRUE(ServiceProcessControl::GetInstance()->IsConnected()); |
Disconnect(); |
@@ -271,7 +300,7 @@ IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, |
#endif |
IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, MAYBE_ForceShutdown) { |
// Launch the service process. |
- LaunchServiceProcessControl(); |
+ LaunchServiceProcessControl(true); |
// Make sure we are connected to the service process. |
ASSERT_TRUE(ServiceProcessControl::GetInstance()->IsConnected()); |
base::ProcessId service_pid; |
@@ -290,7 +319,7 @@ IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, MAYBE_CheckPid) { |
base::ProcessId service_pid; |
EXPECT_FALSE(GetServiceProcessData(NULL, &service_pid)); |
// Launch the service process. |
- LaunchServiceProcessControl(); |
+ LaunchServiceProcessControl(true); |
EXPECT_TRUE(GetServiceProcessData(NULL, &service_pid)); |
EXPECT_NE(static_cast<base::ProcessId>(0), service_pid); |
// Disconnect from service process. |
@@ -316,7 +345,7 @@ IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, HistogramsNoService) { |
#endif |
IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, |
MAYBE_HistogramsTimeout) { |
- LaunchServiceProcessControl(); |
+ LaunchServiceProcessControl(true); |
ASSERT_TRUE(ServiceProcessControl::GetInstance()->IsConnected()); |
// Callback should not be called during GetHistograms call. |
EXPECT_CALL(*this, MockHistogramsCallback()).Times(0); |
@@ -330,7 +359,7 @@ IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, |
} |
IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, MAYBE_Histograms) { |
- LaunchServiceProcessControl(); |
+ LaunchServiceProcessControl(true); |
ASSERT_TRUE(ServiceProcessControl::GetInstance()->IsConnected()); |
// Callback should not be called during GetHistograms call. |
EXPECT_CALL(*this, MockHistogramsCallback()).Times(0); |