2
|
1 |
// Copyright 2009 Google Inc. All Rights Reserved.
|
|
2 |
|
|
3 |
package org.chromium.debug.ui.launcher;
|
|
4 |
|
|
5 |
import org.chromium.debug.core.model.JavascriptVmEmbedder;
|
|
6 |
import org.chromium.debug.core.model.JavascriptVmEmbedderFactory;
|
|
7 |
import org.chromium.debug.core.model.NamedConnectionLoggerFactory;
|
|
8 |
import org.chromium.debug.ui.ChromiumDebugUIPlugin;
|
|
9 |
import org.chromium.debug.ui.DialogBasedTabSelector;
|
|
10 |
import org.chromium.sdk.ConnectionLogger;
|
|
11 |
import org.eclipse.core.runtime.CoreException;
|
|
12 |
import org.eclipse.core.runtime.IPath;
|
|
13 |
import org.eclipse.core.runtime.IStatus;
|
|
14 |
import org.eclipse.core.runtime.Status;
|
|
15 |
import org.eclipse.debug.core.DebugPlugin;
|
|
16 |
import org.eclipse.debug.core.ILaunch;
|
|
17 |
import org.eclipse.debug.core.ILaunchConfiguration;
|
|
18 |
import org.eclipse.debug.core.ILaunchManager;
|
|
19 |
import org.eclipse.debug.core.Launch;
|
|
20 |
|
|
21 |
import java.io.File;
|
|
22 |
import java.io.FileOutputStream;
|
|
23 |
import java.io.IOException;
|
|
24 |
import java.io.OutputStreamWriter;
|
|
25 |
import java.io.Writer;
|
|
26 |
|
|
27 |
public class ChromiumLaunchType extends LaunchTypeBase {
|
|
28 |
@Override
|
|
29 |
protected JavascriptVmEmbedder.ConnectionToRemote createConnectionToRemote(int port,
|
|
30 |
ILaunch launch, boolean addConsoleLogger) throws CoreException {
|
|
31 |
NamedConnectionLoggerFactory consoleFactory =
|
|
32 |
addConsoleLogger ? getLoggerFactory() : NO_CONNECTION_LOGGER_FACTORY;
|
|
33 |
return JavascriptVmEmbedderFactory.connectToChromeDevTools(port, consoleFactory,
|
|
34 |
new DialogBasedTabSelector());
|
|
35 |
}
|
|
36 |
|
|
37 |
private static NamedConnectionLoggerFactory loggerFactory = null;
|
|
38 |
|
|
39 |
private static synchronized NamedConnectionLoggerFactory getLoggerFactory()
|
|
40 |
throws CoreException {
|
|
41 |
if (loggerFactory == null) {
|
|
42 |
loggerFactory = new ConnectionLoggerFactoryImpl();
|
|
43 |
}
|
|
44 |
return loggerFactory;
|
|
45 |
}
|
|
46 |
|
|
47 |
/**
|
|
48 |
* This thing is responsible for creating a separate launch that holds
|
|
49 |
* logger console pseudo-projects.
|
|
50 |
* TODO(peter.rybin): these projects stay as zombies under the launch; fix it
|
|
51 |
*/
|
|
52 |
private static class ConnectionLoggerFactoryImpl implements NamedConnectionLoggerFactory {
|
|
53 |
private static final String LAUNCH_CONFIGURATION_FILE_CONTENT = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n" + //$NON-NLS-1$
|
|
54 |
"<launchConfiguration " + //$NON-NLS-1$
|
|
55 |
"type=\"org.chromium.debug.ui.ConsolePseudoConfigurationType\"/>";
|
|
56 |
|
|
57 |
private final ILaunch commonLaunch;
|
|
58 |
|
|
59 |
/**
|
|
60 |
* Here we create launch configuration and launch, which will hold console pseudo-process.
|
|
61 |
* This is a bit messy, because ILaunchManager mostly supports user creation of new
|
|
62 |
* configurations in UI.
|
|
63 |
*/
|
|
64 |
public ConnectionLoggerFactoryImpl() throws CoreException {
|
|
65 |
String location = Messages.LaunchType_LogConsoleLaunchName + "." + //$NON-NLS-1$
|
|
66 |
ILaunchConfiguration.LAUNCH_CONFIGURATION_FILE_EXTENSION;
|
|
67 |
String memento =
|
|
68 |
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n" + //$NON-NLS-1$
|
|
69 |
"<launchConfiguration " + //$NON-NLS-1$
|
|
70 |
"local=\"true\" path=\"" + location + "\"/>"; //$NON-NLS-1$ //$NON-NLS-2$
|
|
71 |
|
|
72 |
ILaunchConfiguration configuration =
|
|
73 |
DebugPlugin.getDefault().getLaunchManager().getLaunchConfiguration(memento);
|
|
74 |
try {
|
|
75 |
initializeConfigurationFile(configuration.getLocation());
|
|
76 |
} catch (IOException e) {
|
|
77 |
throw new CoreException(new Status(IStatus.ERROR, ChromiumDebugUIPlugin.PLUGIN_ID,
|
|
78 |
"Failed to create launch configuration file", e)); //$NON-NLS-1$
|
|
79 |
}
|
|
80 |
commonLaunch = new Launch(configuration, ILaunchManager.DEBUG_MODE, null);
|
|
81 |
}
|
|
82 |
|
|
83 |
public ConnectionLogger createLogger(String title) {
|
|
84 |
return LaunchTypeBase.createConsoleAndLogger(commonLaunch, true, title);
|
|
85 |
}
|
|
86 |
|
|
87 |
/**
|
|
88 |
* Creates file so that configuration could be read from some location.
|
|
89 |
*/
|
|
90 |
private void initializeConfigurationFile(IPath configurationPath) throws IOException {
|
|
91 |
String osPath = configurationPath.toOSString();
|
|
92 |
File file = new File(osPath);
|
|
93 |
synchronized (this) {
|
|
94 |
Writer writer = new OutputStreamWriter(new FileOutputStream(file));
|
|
95 |
writer.write(
|
|
96 |
LAUNCH_CONFIGURATION_FILE_CONTENT); //$NON-NLS-1$
|
|
97 |
writer.close();
|
|
98 |
}
|
|
99 |
}
|
|
100 |
}
|
|
101 |
} |