Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(301)

Unified Diff: editor/tools/plugins/com.google.dart.tools.debug.core/src/com/google/dart/tools/debug/core/pubserve/PubServeLaunchConfigurationDelegate.java

Issue 166213002: Version 1.2.0-dev.5.7 (Closed) Base URL: http://dart.googlecode.com/svn/trunk/dart/
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: editor/tools/plugins/com.google.dart.tools.debug.core/src/com/google/dart/tools/debug/core/pubserve/PubServeLaunchConfigurationDelegate.java
===================================================================
--- editor/tools/plugins/com.google.dart.tools.debug.core/src/com/google/dart/tools/debug/core/pubserve/PubServeLaunchConfigurationDelegate.java (revision 32687)
+++ editor/tools/plugins/com.google.dart.tools.debug.core/src/com/google/dart/tools/debug/core/pubserve/PubServeLaunchConfigurationDelegate.java (working copy)
@@ -15,7 +15,6 @@
package com.google.dart.tools.debug.core.pubserve;
import com.google.dart.engine.utilities.instrumentation.InstrumentationBuilder;
-import com.google.dart.tools.core.dart2js.ProcessRunner;
import com.google.dart.tools.core.model.DartSdkManager;
import com.google.dart.tools.debug.core.DartDebugCorePlugin;
import com.google.dart.tools.debug.core.DartLaunchConfigWrapper;
@@ -26,16 +25,19 @@
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
-import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchManager;
+import org.eclipse.debug.core.model.IProcess;
+import org.eclipse.debug.core.model.RuntimeProcess;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Semaphore;
@@ -47,14 +49,8 @@
private static Semaphore launchSemaphore = new Semaphore(1);
- private static ProcessRunner runner;
+ private static RuntimeProcess eclipseProcess;
- public static void dispose() {
- if (runner != null) {
- runner.dispose();
- }
- }
-
@Override
public void doLaunch(ILaunchConfiguration configuration, String mode, ILaunch launch,
IProgressMonitor monitor, InstrumentationBuilder instrumentation) throws CoreException {
@@ -76,6 +72,17 @@
}
}
+ private void dispose() {
+ if (eclipseProcess != null) {
+ try {
+ eclipseProcess.terminate();
+ } catch (DebugException e) {
+
+ }
+ eclipseProcess = null;
+ }
+ }
+
private void launchImpl(DartLaunchConfigWrapper launchConfig, String mode, ILaunch launch,
IProgressMonitor monitor) throws CoreException {
@@ -104,24 +111,20 @@
String url = "http://localhost:" + PubServeManager.PORT_NUMBER;
- launchInDartium(url + "/" + resource.getName(), launchConfig);
+ launchInDartium(url + "/" + resource.getName(), launch, launchConfig, monitor);
- DebugPlugin.getDefault().getLaunchManager().removeLaunch(launch);
-
}
- private void launchInDartium(final String url, DartLaunchConfigWrapper launchConfig)
- throws CoreException {
+ private void launchInDartium(final String url, ILaunch launch,
+ DartLaunchConfigWrapper launchConfig, IProgressMonitor monitor) throws CoreException {
// close a running instance of Dartium, if any
dispose();
- List<String> cmd = new ArrayList<String>();
-
File dartium = DartSdkManager.getManager().getSdk().getDartiumExecutable();
+ List<String> cmd = new ArrayList<String>();
cmd.add(dartium.getAbsolutePath());
-
// In order to start up multiple Chrome processes, we need to specify a different user dir.
cmd.add("--user-data-dir=" + BrowserManager.getCreateUserDataDirectoryPath("pubserve"));
@@ -129,46 +132,58 @@
cmd.add("--enable-experimental-web-platform-features");
cmd.add("--enable-html-imports");
}
-
// Disables the default browser check.
cmd.add("--no-default-browser-check");
-
// Bypass the error dialog when the profile lock couldn't be attained.
cmd.add("--no-process-singleton-dialog");
-
for (String arg : launchConfig.getArgumentsAsArray()) {
cmd.add(arg);
}
cmd.add(url);
+ ProcessBuilder processBuilder = new ProcessBuilder(cmd);
+ Map<String, String> env = processBuilder.environment();
+ // Due to differences in 32bit and 64 bit environments, dartium 32bit launch does not work on
+ // linux with this property.
+ env.remove("LD_LIBRARY_PATH");
+ if (launchConfig.getCheckedMode()) {
+ env.put("DART_FLAGS", "--enable-checked-mode");
+ }
+
+ Process javaProcess = null;
+
try {
- ProcessBuilder builder = new ProcessBuilder(cmd);
- Map<String, String> env = builder.environment();
- // Due to differences in 32bit and 64 bit environments, dartium 32bit launch does not work on
- // linux with this property.
- env.remove("LD_LIBRARY_PATH");
+ javaProcess = processBuilder.start();
+ } catch (IOException ioe) {
+ throw new CoreException(new Status(
+ IStatus.ERROR,
+ DartDebugCorePlugin.PLUGIN_ID,
+ ioe.getMessage(),
+ ioe));
+ }
- if (launchConfig.getCheckedMode()) {
- env.put("DART_FLAGS", "--enable-checked-mode");
- }
+ eclipseProcess = null;
- runner = new ProcessRunner(builder);
- runner.runAsync();
- runner.await(new NullProgressMonitor(), 500);
+ Map<String, String> processAttributes = new HashMap<String, String>();
+ String programName = "dartium";
+ processAttributes.put(IProcess.ATTR_PROCESS_TYPE, programName);
- if (runner.getExitCode() != 0) {
+ if (javaProcess != null) {
+ monitor.beginTask("Dartium", IProgressMonitor.UNKNOWN);
- throw new CoreException(new Status(
- IStatus.ERROR,
- DartDebugCorePlugin.PLUGIN_ID,
- "Could not launch dartium : \n\n" + runner.getStdErr()));
+ eclipseProcess = new RuntimeProcess(launch, javaProcess, launchConfig.getApplicationName()
+ + " (" + new Date() + ")", processAttributes);
+
+ }
+
+ if (javaProcess == null || eclipseProcess == null) {
+ if (javaProcess != null) {
+ javaProcess.destroy();
}
- } catch (IOException e) {
- throw new CoreException(new Status(
- IStatus.ERROR,
- DartDebugCorePlugin.PLUGIN_ID,
- "Dartium not found",
- e));
+
+ throw new CoreException(
+ DartDebugCorePlugin.createErrorStatus("Error starting Dartium browser"));
}
+
}
}

Powered by Google App Engine
This is Rietveld 408576698