Chromium Code Reviews| Index: win8/viewer/metro_viewer_process_host.cc |
| diff --git a/win8/viewer/metro_viewer_process_host.cc b/win8/viewer/metro_viewer_process_host.cc |
| index 276aa2c0b2f9265c6f6fea07f6f5a34d36ca9267..7201c984e73c73e115f6888b96fbc8567eaeae83 100644 |
| --- a/win8/viewer/metro_viewer_process_host.cc |
| +++ b/win8/viewer/metro_viewer_process_host.cc |
| @@ -47,7 +47,8 @@ void MetroViewerProcessHost::InternalMessageFilter::OnChannelConnected( |
| } |
| MetroViewerProcessHost::MetroViewerProcessHost( |
| - base::SingleThreadTaskRunner* ipc_task_runner) { |
| + base::SingleThreadTaskRunner* ipc_task_runner) |
| + : launched_for_test_(false) { |
| DCHECK(!instance_); |
| instance_ = this; |
| @@ -74,7 +75,15 @@ MetroViewerProcessHost::~MetroViewerProcessHost() { |
| PROCESS_QUERY_INFORMATION | SYNCHRONIZE, |
| &viewer_process); |
| if (viewer_process) { |
| - ::WaitForSingleObject(viewer_process, INFINITE); |
| + if (launched_for_test_) { |
| + // In tests, we don't want to wait around for the viewer to |
| + // terminate, so kill it after a short delay. See |
| + // http://crbug.com/411147 for more details. |
| + ::WaitForSingleObject(viewer_process, 100); |
|
ananta
2014/09/19 19:36:57
Just TerminateProcess here?. The viewer has no sta
scottmg
2014/09/19 19:41:19
Sure, Done.
|
| + ::TerminateProcess(viewer_process, 0); |
| + } else { |
| + ::WaitForSingleObject(viewer_process, INFINITE); |
| + } |
| ::CloseHandle(viewer_process); |
| } |
| } |
| @@ -89,6 +98,12 @@ base::ProcessId MetroViewerProcessHost::GetViewerProcessId() { |
| return base::kNullProcessId; |
| } |
| +bool MetroViewerProcessHost::LaunchViewerAndWaitForConnectionForTests( |
| + const base::string16& app_user_model_id) { |
| + launched_for_test_ = true; |
| + return LaunchViewerAndWaitForConnection(app_user_model_id); |
| +} |
| + |
| bool MetroViewerProcessHost::LaunchViewerAndWaitForConnection( |
| const base::string16& app_user_model_id) { |
| DCHECK_EQ(base::kNullProcessId, channel_->GetPeerPID()); |