17 import org.chromium.sdk.internal.FunctionAdditionalProperties; |
17 import org.chromium.sdk.internal.FunctionAdditionalProperties; |
18 import org.chromium.sdk.internal.JsDataTypeUtil; |
18 import org.chromium.sdk.internal.JsDataTypeUtil; |
19 import org.chromium.sdk.internal.PropertyHoldingValueMirror; |
19 import org.chromium.sdk.internal.PropertyHoldingValueMirror; |
20 import org.chromium.sdk.internal.PropertyReference; |
20 import org.chromium.sdk.internal.PropertyReference; |
21 import org.chromium.sdk.internal.ScopeMirror; |
21 import org.chromium.sdk.internal.ScopeMirror; |
|
22 import org.chromium.sdk.internal.ScriptImpl; |
22 import org.chromium.sdk.internal.ScriptManager; |
23 import org.chromium.sdk.internal.ScriptManager; |
23 import org.chromium.sdk.internal.SubpropertiesMirror; |
24 import org.chromium.sdk.internal.SubpropertiesMirror; |
24 import org.chromium.sdk.internal.ValueLoadException; |
25 import org.chromium.sdk.internal.ValueLoadException; |
25 import org.chromium.sdk.internal.ValueMirror; |
26 import org.chromium.sdk.internal.ValueMirror; |
26 import org.chromium.sdk.internal.protocol.CommandResponse; |
27 import org.chromium.sdk.internal.protocol.CommandResponse; |
32 import org.chromium.sdk.internal.protocol.data.PropertyObject; |
33 import org.chromium.sdk.internal.protocol.data.PropertyObject; |
33 import org.chromium.sdk.internal.protocol.data.RefWithDisplayData; |
34 import org.chromium.sdk.internal.protocol.data.RefWithDisplayData; |
34 import org.chromium.sdk.internal.protocol.data.ScriptHandle; |
35 import org.chromium.sdk.internal.protocol.data.ScriptHandle; |
35 import org.chromium.sdk.internal.protocol.data.ValueHandle; |
36 import org.chromium.sdk.internal.protocol.data.ValueHandle; |
36 import org.chromium.sdk.internal.protocolparser.JsonProtocolParseException; |
37 import org.chromium.sdk.internal.protocolparser.JsonProtocolParseException; |
|
38 import org.chromium.sdk.internal.tools.v8.request.ContextlessDebuggerMessage; |
37 import org.chromium.sdk.internal.tools.v8.request.DebuggerMessageFactory; |
39 import org.chromium.sdk.internal.tools.v8.request.DebuggerMessageFactory; |
38 import org.chromium.sdk.internal.tools.v8.request.ScriptsMessage; |
40 import org.chromium.sdk.internal.tools.v8.request.ScriptsMessage; |
39 |
41 |
40 /** |
42 /** |
41 * A helper class for performing complex V8-related operations. |
43 * A helper class for performing complex V8-related operations. |
42 */ |
44 */ |
43 public class V8Helper { |
45 public class V8Helper { |
44 |
46 |
45 /** |
|
46 * The debug context in which the operations are performed. |
|
47 */ |
|
48 private final DebugSession debugSession; |
|
49 |
|
50 public V8Helper(DebugSession debugSession) { |
47 public V8Helper(DebugSession debugSession) { |
51 this.debugSession = debugSession; |
|
52 } |
48 } |
53 |
49 |
54 public interface ScriptLoadCallback { |
50 public interface ScriptLoadCallback { |
55 void success(); |
51 void success(); |
56 void failure(String message); |
52 void failure(String message); |
61 * @param callback to invoke when the script reloading has completed |
57 * @param callback to invoke when the script reloading has completed |
62 * @param syncCallback to invoke after callback whether it normally returned or threw an exception |
58 * @param syncCallback to invoke after callback whether it normally returned or threw an exception |
63 */ |
59 */ |
64 public static void reloadAllScriptsAsync(final DebugSession debugSession, |
60 public static void reloadAllScriptsAsync(final DebugSession debugSession, |
65 final ScriptLoadCallback callback, SyncCallback syncCallback) { |
61 final ScriptLoadCallback callback, SyncCallback syncCallback) { |
|
62 reloadScriptAsync(debugSession, null, callback, syncCallback); |
|
63 } |
|
64 |
|
65 /** |
|
66 * Loads specified scripts or all existing scripts and stores them in ScriptManager. |
|
67 * @param ids ids of requested scripts or null for all scripts |
|
68 * @param callback to invoke when the script reloading has completed |
|
69 * @param syncCallback to invoke after callback, regardless of whether it has returned normally |
|
70 * or thrown an exception |
|
71 */ |
|
72 public static void reloadScriptAsync(final DebugSession debugSession, final List<Long> ids, |
|
73 final ScriptLoadCallback callback, SyncCallback syncCallback) { |
|
74 ContextlessDebuggerMessage message = DebuggerMessageFactory.scripts(ids, true); |
|
75 if (ids == null) { |
|
76 message = DebuggerMessageFactory.scripts(ScriptsMessage.SCRIPTS_NORMAL, true); |
|
77 } else { |
|
78 message = DebuggerMessageFactory.scripts(ids, true); |
|
79 } |
66 debugSession.sendMessageAsync( |
80 debugSession.sendMessageAsync( |
67 DebuggerMessageFactory.scripts(ScriptsMessage.SCRIPTS_NORMAL, true), |
81 message, |
68 true, |
82 true, |
69 new V8CommandCallbackBase() { |
83 new V8CommandCallbackBase() { |
70 @Override |
84 @Override |
71 public void failure(String message) { |
85 public void failure(String message) { |
72 callback.failure(message); |
86 if (callback != null) { |
|
87 callback.failure(message); |
|
88 } |
73 } |
89 } |
74 |
90 |
75 @Override |
91 @Override |
76 public void success(SuccessCommandResponse successResponse) { |
92 public void success(SuccessCommandResponse successResponse) { |
77 List<ScriptHandle> body; |
93 List<ScriptHandle> body; |
81 throw new RuntimeException(e); |
97 throw new RuntimeException(e); |
82 } |
98 } |
83 ScriptManager scriptManager = debugSession.getScriptManager(); |
99 ScriptManager scriptManager = debugSession.getScriptManager(); |
84 for (int i = 0; i < body.size(); ++i) { |
100 for (int i = 0; i < body.size(); ++i) { |
85 ScriptHandle scriptHandle = body.get(i); |
101 ScriptHandle scriptHandle = body.get(i); |
|
102 if (ChromeDevToolSessionManager.JAVASCRIPT_VOID.equals(scriptHandle.source())) { |
|
103 continue; |
|
104 } |
86 Long id = V8ProtocolUtil.getScriptIdFromResponse(scriptHandle); |
105 Long id = V8ProtocolUtil.getScriptIdFromResponse(scriptHandle); |
87 if (scriptManager.findById(id) == null && |
106 ScriptImpl scriptById = scriptManager.findById(id); |
88 !ChromeDevToolSessionManager.JAVASCRIPT_VOID.equals(scriptHandle.source())) { |
107 if (scriptById == null) { |
89 scriptManager.addScript(scriptHandle, successResponse.getRefs()); |
108 scriptManager.addScript(scriptHandle, successResponse.getRefs()); |
|
109 } else { |
|
110 // A scrupulous refactoring note: |
|
111 // do not call setSource in a legacy case, when ids parameter is null. |
|
112 if (ids != null) { |
|
113 scriptById.setSource(scriptHandle.source()); |
|
114 } |
90 } |
115 } |
91 } |
116 } |
92 callback.success(); |
117 if (callback != null) { |
|
118 callback.success(); |
|
119 } |
93 } |
120 } |
94 }, |
121 }, |
95 syncCallback); |
122 syncCallback); |
96 } |
123 } |
97 |
124 |