|
1 diff -r 42f09aa2b24a org.chromium.debug.core/src/org/chromium/debug/core/model/DebugTargetImpl.java |
|
2 --- a/org.chromium.debug.core/src/org/chromium/debug/core/model/DebugTargetImpl.java Mon Apr 19 15:00:57 2010 -0700 |
|
3 +++ b/org.chromium.debug.core/src/org/chromium/debug/core/model/DebugTargetImpl.java Wed Apr 21 09:29:57 2010 -0700 |
|
4 @@ -187,7 +187,17 @@ |
|
5 } |
|
6 |
|
7 public void terminate() throws DebugException { |
|
8 - disconnect(); |
|
9 + if (workspaceBridgeFactory.canCloseTab()) { |
|
10 + closeTab(); |
|
11 + } else { |
|
12 + disconnect(); |
|
13 + } |
|
14 + } |
|
15 + |
|
16 + private void closeTab() { |
|
17 + if (!vmEmbedder.getJavascriptVm().close()) { |
|
18 + ChromiumDebugPlugin.logWarning(Messages.DebugTargetImpl_BadResultWhileDisconnecting); |
|
19 + } |
|
20 } |
|
21 |
|
22 public boolean canResume() { |
|
23 diff -r 42f09aa2b24a org.chromium.debug.core/src/org/chromium/debug/core/model/VProjectWorkspaceBridge.java |
|
24 --- a/org.chromium.debug.core/src/org/chromium/debug/core/model/VProjectWorkspaceBridge.java Mon Apr 19 15:00:57 2010 -0700 |
|
25 +++ b/org.chromium.debug.core/src/org/chromium/debug/core/model/VProjectWorkspaceBridge.java Wed Apr 21 09:29:57 2010 -0700 |
|
26 @@ -56,6 +56,10 @@ |
|
27 public JsLabelProvider getLabelProvider() { |
|
28 return LABEL_PROVIDER; |
|
29 } |
|
30 + |
|
31 + public boolean canCloseTab() { |
|
32 + return false; |
|
33 + } |
|
34 } |
|
35 |
|
36 private final IProject debugProject; |
|
37 diff -r 42f09aa2b24a org.chromium.debug.core/src/org/chromium/debug/core/model/WorkspaceBridge.java |
|
38 --- a/org.chromium.debug.core/src/org/chromium/debug/core/model/WorkspaceBridge.java Mon Apr 19 15:00:57 2010 -0700 |
|
39 +++ b/org.chromium.debug.core/src/org/chromium/debug/core/model/WorkspaceBridge.java Wed Apr 21 09:29:57 2010 -0700 |
|
40 @@ -46,6 +46,11 @@ |
|
41 * User may cache value of this method. |
|
42 */ |
|
43 JsLabelProvider getLabelProvider(); |
|
44 + |
|
45 + /** |
|
46 + * Returns <code>true</code> if debugger is allowed to close tab. |
|
47 + */ |
|
48 + boolean canCloseTab(); |
|
49 } |
|
50 |
|
51 /** |
|
52 @@ -100,6 +105,7 @@ |
|
53 void breakpointsHit(Collection<? extends Breakpoint> breakpointsHit); |
|
54 } |
|
55 |
|
56 + |
|
57 /** |
|
58 * Label provider for several debug elements. This object should be stateless. |
|
59 */ |
|
60 diff -r 42f09aa2b24a org.chromium.sdk/src/logging.properties |
|
61 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 |
|
62 +++ b/org.chromium.sdk/src/logging.properties Wed Apr 21 09:29:57 2010 -0700 |
|
63 @@ -0,0 +1,2 @@ |
|
64 +.level=WARNING |
|
65 + |
|
66 diff -r 42f09aa2b24a org.chromium.sdk/src/org/chromium/sdk/JavascriptVm.java |
|
67 --- a/org.chromium.sdk/src/org/chromium/sdk/JavascriptVm.java Mon Apr 19 15:00:57 2010 -0700 |
|
68 +++ b/org.chromium.sdk/src/org/chromium/sdk/JavascriptVm.java Wed Apr 21 09:29:57 2010 -0700 |
|
69 @@ -58,6 +58,13 @@ |
|
70 boolean detach(); |
|
71 |
|
72 /** |
|
73 + * Closes associated tab |
|
74 + * |
|
75 + * @return whether the operation succeeded |
|
76 + */ |
|
77 + boolean close(); |
|
78 + |
|
79 + /** |
|
80 * @return whether the tab is currently attached |
|
81 */ |
|
82 boolean isAttached(); |
|
83 diff -r 42f09aa2b24a org.chromium.sdk/src/org/chromium/sdk/internal/BrowserTabImpl.java |
|
84 --- a/org.chromium.sdk/src/org/chromium/sdk/internal/BrowserTabImpl.java Mon Apr 19 15:00:57 2010 -0700 |
|
85 +++ b/org.chromium.sdk/src/org/chromium/sdk/internal/BrowserTabImpl.java Wed Apr 21 09:29:57 2010 -0700 |
|
86 @@ -107,6 +107,11 @@ |
|
87 return Result.OK == result; |
|
88 } |
|
89 |
|
90 + public boolean close() { |
|
91 + Result result = devToolSessionManager.closeTab(); |
|
92 + return Result.OK == result; |
|
93 + } |
|
94 + |
|
95 public boolean isAttached() { |
|
96 return devToolSessionManager.isAttachedForUi(); |
|
97 } |
|
98 diff -r 42f09aa2b24a org.chromium.sdk/src/org/chromium/sdk/internal/StandaloneVmImpl.java |
|
99 --- a/org.chromium.sdk/src/org/chromium/sdk/internal/StandaloneVmImpl.java Mon Apr 19 15:00:57 2010 -0700 |
|
100 +++ b/org.chromium.sdk/src/org/chromium/sdk/internal/StandaloneVmImpl.java Wed Apr 21 09:29:57 2010 -0700 |
|
101 @@ -149,6 +149,10 @@ |
|
102 connection.close(); |
|
103 return true; |
|
104 } |
|
105 + |
|
106 + public boolean close() { |
|
107 + return detach(); |
|
108 + } |
|
109 |
|
110 public boolean isAttached() { |
|
111 return connectionState == ConnectionState.CONNECTED; |
|
112 diff -r 42f09aa2b24a org.chromium.sdk/src/org/chromium/sdk/internal/tools/v8/ChromeDevToolSessionManager.java |
|
113 --- a/org.chromium.sdk/src/org/chromium/sdk/internal/tools/v8/ChromeDevToolSessionManager.java Mon Apr 19 15:00:57 2010 -0700 |
|
114 +++ b/org.chromium.sdk/src/org/chromium/sdk/internal/tools/v8/ChromeDevToolSessionManager.java Wed Apr 21 09:29:57 2010 -0700 |
|
115 @@ -161,6 +161,7 @@ |
|
116 processAttach(json); |
|
117 break; |
|
118 case DETACH: |
|
119 + case TERMINATE: |
|
120 processDetach(json); |
|
121 break; |
|
122 case DEBUGGER_COMMAND: |
|
123 @@ -172,6 +173,9 @@ |
|
124 case CLOSED: |
|
125 processClosed(json); |
|
126 break; |
|
127 + default: |
|
128 + System.out.println(message.getContent()); |
|
129 + return; |
|
130 } |
|
131 return; |
|
132 } |
|
133 @@ -264,6 +268,30 @@ |
|
134 return result; |
|
135 } |
|
136 |
|
137 + /** |
|
138 + * Closes associated browser tab. |
|
139 + * @return terminate request result |
|
140 + */ |
|
141 + public Result closeTab() { |
|
142 + if (attachState.get() != AttachState.NORMAL) { |
|
143 + toolHandler.onDebuggerDetached(); |
|
144 + return Result.ILLEGAL_TAB_STATE; |
|
145 + } |
|
146 + |
|
147 + String command = V8DebuggerToolMessageFactory.terminate(); |
|
148 + Result result; |
|
149 + try { |
|
150 + result = sendSimpleCommandSync(detachCallback, command); |
|
151 + } catch (AttachmentFailureException e) { |
|
152 + result = null; |
|
153 + } finally { |
|
154 + // Make sure line is cut |
|
155 + cutTheLineMyself(); |
|
156 + } |
|
157 + |
|
158 + return result; |
|
159 + } |
|
160 + |
|
161 private Result sendSimpleCommandSync(AtomicReference<ResultAwareCallback> callbackReference, |
|
162 String command) throws AttachmentFailureException { |
|
163 final Semaphore sem = new Semaphore(0); |
|
164 @@ -448,6 +476,10 @@ |
|
165 return createDebuggerMessage(DebuggerToolCommand.DETACH, null); |
|
166 } |
|
167 |
|
168 + static String terminate() { |
|
169 + return createDebuggerMessage(DebuggerToolCommand.TERMINATE, null); |
|
170 + } |
|
171 + |
|
172 public static String debuggerCommand(String json) { |
|
173 return createDebuggerMessage(DebuggerToolCommand.DEBUGGER_COMMAND, json); |
|
174 } |
|
175 diff -r 42f09aa2b24a org.chromium.sdk/src/org/chromium/sdk/internal/tools/v8/DebuggerToolCommand.java |
|
176 --- a/org.chromium.sdk/src/org/chromium/sdk/internal/tools/v8/DebuggerToolCommand.java Mon Apr 19 15:00:57 2010 -0700 |
|
177 +++ b/org.chromium.sdk/src/org/chromium/sdk/internal/tools/v8/DebuggerToolCommand.java Wed Apr 21 09:29:57 2010 -0700 |
|
178 @@ -13,6 +13,8 @@ |
|
179 public enum DebuggerToolCommand { |
|
180 ATTACH("attach"), |
|
181 DETACH("detach"), |
|
182 + TERMINATE("terminate"), |
|
183 + DISPATCH("dispatch"), |
|
184 DEBUGGER_COMMAND("debugger_command"), |
|
185 EVALUATE_JAVASCRIPT("evaluate_javascript"), |
|
186 |
|
187 diff -r 42f09aa2b24a org.symbian.tools.wrttools.debug.core/my.txt |
|
188 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 |
|
189 +++ b/org.symbian.tools.wrttools.debug.core/my.txt Wed Apr 21 09:29:57 2010 -0700 |
|
190 @@ -0,0 +1,8 @@ |
|
191 +This is a patch to close tab on debugger request. I also have a patch for Chrome |
|
192 +Developer Tools that I will submit later. |
|
193 + |
|
194 +Is there any documentation on Chrome APIs? I really doubt I used correct one to |
|
195 +close the tab. |
|
196 + |
|
197 +This is my first attempt to submit patch to Chromium so I would be greateful for |
|
198 +any feedback. |
|
199 \ No newline at end of file |
|
200 diff -r 42f09aa2b24a org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/internal/ChromeDebugUtils.java |
|
201 --- a/org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/internal/ChromeDebugUtils.java Mon Apr 19 15:00:57 2010 -0700 |
|
202 +++ b/org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/internal/ChromeDebugUtils.java Wed Apr 21 09:29:57 2010 -0700 |
|
203 @@ -30,10 +30,25 @@ |
|
204 if (chromeExecutable.isFile()) { |
|
205 return chromeExecutable.getAbsolutePath(); |
|
206 } |
|
207 + chromeExecutable = new File(file, getChromiumExecutable()); |
|
208 + if (chromeExecutable.isFile()) { |
|
209 + return chromeExecutable.getAbsolutePath(); |
|
210 + } |
|
211 } |
|
212 return null; |
|
213 } |
|
214 |
|
215 + private static String getChromiumExecutable() { |
|
216 + // Add more ifs as we add support for new platforms |
|
217 + if (CoreUtil.isMac()) { |
|
218 + return "Chromium.app/Contents/MacOS/Chromium"; |
|
219 + } else if (CoreUtil.isLinux()) { |
|
220 + return "chromium"; |
|
221 + } else { |
|
222 + return "chromium.exe"; |
|
223 + } |
|
224 + } |
|
225 + |
|
226 private static String getExecutable() { |
|
227 // Add more ifs as we add support for new platforms |
|
228 if (CoreUtil.isMac()) { |
|
229 diff -r 42f09aa2b24a org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/internal/launch/ChromeInstancesManager.java |
|
230 --- a/org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/internal/launch/ChromeInstancesManager.java Mon Apr 19 15:00:57 2010 -0700 |
|
231 +++ b/org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/internal/launch/ChromeInstancesManager.java Wed Apr 21 09:29:57 2010 -0700 |
|
232 @@ -44,7 +44,8 @@ |
|
233 "--disable-extenions", // Use standard UI, should also improve speed and stability |
|
234 "--disable-plugins", // Run faster! |
|
235 "--activate-on-launch", // Bring to front on Mac |
|
236 - "--always-enable-dev-tools", "--no-default-browser-check", // Our users don't need this nagging |
|
237 + "--exit-on-no-windows", // Bring to front on Mac |
|
238 + "--no-default-browser-check", // Our users don't need this nagging |
|
239 "--no-first-run", // We don't care |
|
240 "--app=%s" // Here we will have widget URI as --app argument |
|
241 }; |
|
242 diff -r 42f09aa2b24a org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/internal/launch/WRTProjectWorkspaceBridge.java |
|
243 --- a/org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/internal/launch/WRTProjectWorkspaceBridge.java Mon Apr 19 15:00:57 2010 -0700 |
|
244 +++ b/org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/internal/launch/WRTProjectWorkspaceBridge.java Wed Apr 21 09:29:57 2010 -0700 |
|
245 @@ -49,6 +49,10 @@ |
|
246 return new WrtLabelProvider(); |
|
247 } |
|
248 |
|
249 + public boolean canCloseTab() { |
|
250 + return true; |
|
251 + } |
|
252 + |
|
253 } |
|
254 |
|
255 // public final static String DEBUG_MODEL_ID = VProjectWorkspaceBridge.DEBUG_MODEL_ID; |
|
256 diff -r 42f09aa2b24a org.symbian.tools.wrttools.product/launch/WRT IDE Product (Mac OS X).launch |
|
257 --- a/org.symbian.tools.wrttools.product/launch/WRT IDE Product (Mac OS X).launch Mon Apr 19 15:00:57 2010 -0700 |
|
258 +++ b/org.symbian.tools.wrttools.product/launch/WRT IDE Product (Mac OS X).launch Wed Apr 21 09:29:57 2010 -0700 |
|
259 @@ -1,4 +1,4 @@ |
|
260 -<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
|
261 +<?xml version="1.0" encoding="UTF-8"?> |
|
262 <launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench"> |
|
263 <booleanAttribute key="append.args" value="true"/> |
|
264 <booleanAttribute key="askclear" value="true"/> |