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()); |