|
1 /* -*- js2-basic-offset: 2; indent-tabs-mode: nil; -*- */ |
|
2 /* vim: set ts=2 et sw=2 tw=80: */ |
|
3 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
4 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
6 |
|
7 "use strict"; |
|
8 |
|
9 const {Cc, Ci, Cu} = require("chrome"); |
|
10 |
|
11 loader.lazyImporter(this, "LongStringClient", "resource://gre/modules/devtools/dbg-client.jsm"); |
|
12 |
|
13 /** |
|
14 * A WebConsoleClient is used as a front end for the WebConsoleActor that is |
|
15 * created on the server, hiding implementation details. |
|
16 * |
|
17 * @param object aDebuggerClient |
|
18 * The DebuggerClient instance we live for. |
|
19 * @param object aResponse |
|
20 * The response packet received from the "startListeners" request sent to |
|
21 * the WebConsoleActor. |
|
22 */ |
|
23 function WebConsoleClient(aDebuggerClient, aResponse) |
|
24 { |
|
25 this._actor = aResponse.from; |
|
26 this._client = aDebuggerClient; |
|
27 this._longStrings = {}; |
|
28 this.traits = aResponse.traits || {}; |
|
29 } |
|
30 exports.WebConsoleClient = WebConsoleClient; |
|
31 |
|
32 WebConsoleClient.prototype = { |
|
33 _longStrings: null, |
|
34 traits: null, |
|
35 |
|
36 get actor() { return this._actor; }, |
|
37 |
|
38 /** |
|
39 * Retrieve the cached messages from the server. |
|
40 * |
|
41 * @see this.CACHED_MESSAGES |
|
42 * @param array aTypes |
|
43 * The array of message types you want from the server. See |
|
44 * this.CACHED_MESSAGES for known types. |
|
45 * @param function aOnResponse |
|
46 * The function invoked when the response is received. |
|
47 */ |
|
48 getCachedMessages: function WCC_getCachedMessages(aTypes, aOnResponse) |
|
49 { |
|
50 let packet = { |
|
51 to: this._actor, |
|
52 type: "getCachedMessages", |
|
53 messageTypes: aTypes, |
|
54 }; |
|
55 this._client.request(packet, aOnResponse); |
|
56 }, |
|
57 |
|
58 /** |
|
59 * Inspect the properties of an object. |
|
60 * |
|
61 * @param string aActor |
|
62 * The WebConsoleObjectActor ID to send the request to. |
|
63 * @param function aOnResponse |
|
64 * The function invoked when the response is received. |
|
65 */ |
|
66 inspectObjectProperties: |
|
67 function WCC_inspectObjectProperties(aActor, aOnResponse) |
|
68 { |
|
69 let packet = { |
|
70 to: aActor, |
|
71 type: "inspectProperties", |
|
72 }; |
|
73 this._client.request(packet, aOnResponse); |
|
74 }, |
|
75 |
|
76 /** |
|
77 * Evaluate a JavaScript expression. |
|
78 * |
|
79 * @param string aString |
|
80 * The code you want to evaluate. |
|
81 * @param function aOnResponse |
|
82 * The function invoked when the response is received. |
|
83 * @param object [aOptions={}] |
|
84 * Options for evaluation: |
|
85 * |
|
86 * - bindObjectActor: an ObjectActor ID. The OA holds a reference to |
|
87 * a Debugger.Object that wraps a content object. This option allows |
|
88 * you to bind |_self| to the D.O of the given OA, during string |
|
89 * evaluation. |
|
90 * |
|
91 * See: Debugger.Object.evalInGlobalWithBindings() for information |
|
92 * about bindings. |
|
93 * |
|
94 * Use case: the variable view needs to update objects and it does so |
|
95 * by knowing the ObjectActor it inspects and binding |_self| to the |
|
96 * D.O of the OA. As such, variable view sends strings like these for |
|
97 * eval: |
|
98 * _self["prop"] = value; |
|
99 * |
|
100 * - frameActor: a FrameActor ID. The FA holds a reference to |
|
101 * a Debugger.Frame. This option allows you to evaluate the string in |
|
102 * the frame of the given FA. |
|
103 * |
|
104 * - url: the url to evaluate the script as. Defaults to |
|
105 * "debugger eval code". |
|
106 */ |
|
107 evaluateJS: function WCC_evaluateJS(aString, aOnResponse, aOptions = {}) |
|
108 { |
|
109 let packet = { |
|
110 to: this._actor, |
|
111 type: "evaluateJS", |
|
112 text: aString, |
|
113 bindObjectActor: aOptions.bindObjectActor, |
|
114 frameActor: aOptions.frameActor, |
|
115 url: aOptions.url, |
|
116 }; |
|
117 this._client.request(packet, aOnResponse); |
|
118 }, |
|
119 |
|
120 /** |
|
121 * Autocomplete a JavaScript expression. |
|
122 * |
|
123 * @param string aString |
|
124 * The code you want to autocomplete. |
|
125 * @param number aCursor |
|
126 * Cursor location inside the string. Index starts from 0. |
|
127 * @param function aOnResponse |
|
128 * The function invoked when the response is received. |
|
129 * @param string aFrameActor |
|
130 * The id of the frame actor that made the call. |
|
131 */ |
|
132 autocomplete: function WCC_autocomplete(aString, aCursor, aOnResponse, aFrameActor) |
|
133 { |
|
134 let packet = { |
|
135 to: this._actor, |
|
136 type: "autocomplete", |
|
137 text: aString, |
|
138 cursor: aCursor, |
|
139 frameActor: aFrameActor, |
|
140 }; |
|
141 this._client.request(packet, aOnResponse); |
|
142 }, |
|
143 |
|
144 /** |
|
145 * Clear the cache of messages (page errors and console API calls). |
|
146 */ |
|
147 clearMessagesCache: function WCC_clearMessagesCache() |
|
148 { |
|
149 let packet = { |
|
150 to: this._actor, |
|
151 type: "clearMessagesCache", |
|
152 }; |
|
153 this._client.request(packet); |
|
154 }, |
|
155 |
|
156 /** |
|
157 * Get Web Console-related preferences on the server. |
|
158 * |
|
159 * @param array aPreferences |
|
160 * An array with the preferences you want to retrieve. |
|
161 * @param function [aOnResponse] |
|
162 * Optional function to invoke when the response is received. |
|
163 */ |
|
164 getPreferences: function WCC_getPreferences(aPreferences, aOnResponse) |
|
165 { |
|
166 let packet = { |
|
167 to: this._actor, |
|
168 type: "getPreferences", |
|
169 preferences: aPreferences, |
|
170 }; |
|
171 this._client.request(packet, aOnResponse); |
|
172 }, |
|
173 |
|
174 /** |
|
175 * Set Web Console-related preferences on the server. |
|
176 * |
|
177 * @param object aPreferences |
|
178 * An object with the preferences you want to change. |
|
179 * @param function [aOnResponse] |
|
180 * Optional function to invoke when the response is received. |
|
181 */ |
|
182 setPreferences: function WCC_setPreferences(aPreferences, aOnResponse) |
|
183 { |
|
184 let packet = { |
|
185 to: this._actor, |
|
186 type: "setPreferences", |
|
187 preferences: aPreferences, |
|
188 }; |
|
189 this._client.request(packet, aOnResponse); |
|
190 }, |
|
191 |
|
192 /** |
|
193 * Retrieve the request headers from the given NetworkEventActor. |
|
194 * |
|
195 * @param string aActor |
|
196 * The NetworkEventActor ID. |
|
197 * @param function aOnResponse |
|
198 * The function invoked when the response is received. |
|
199 */ |
|
200 getRequestHeaders: function WCC_getRequestHeaders(aActor, aOnResponse) |
|
201 { |
|
202 let packet = { |
|
203 to: aActor, |
|
204 type: "getRequestHeaders", |
|
205 }; |
|
206 this._client.request(packet, aOnResponse); |
|
207 }, |
|
208 |
|
209 /** |
|
210 * Retrieve the request cookies from the given NetworkEventActor. |
|
211 * |
|
212 * @param string aActor |
|
213 * The NetworkEventActor ID. |
|
214 * @param function aOnResponse |
|
215 * The function invoked when the response is received. |
|
216 */ |
|
217 getRequestCookies: function WCC_getRequestCookies(aActor, aOnResponse) |
|
218 { |
|
219 let packet = { |
|
220 to: aActor, |
|
221 type: "getRequestCookies", |
|
222 }; |
|
223 this._client.request(packet, aOnResponse); |
|
224 }, |
|
225 |
|
226 /** |
|
227 * Retrieve the request post data from the given NetworkEventActor. |
|
228 * |
|
229 * @param string aActor |
|
230 * The NetworkEventActor ID. |
|
231 * @param function aOnResponse |
|
232 * The function invoked when the response is received. |
|
233 */ |
|
234 getRequestPostData: function WCC_getRequestPostData(aActor, aOnResponse) |
|
235 { |
|
236 let packet = { |
|
237 to: aActor, |
|
238 type: "getRequestPostData", |
|
239 }; |
|
240 this._client.request(packet, aOnResponse); |
|
241 }, |
|
242 |
|
243 /** |
|
244 * Retrieve the response headers from the given NetworkEventActor. |
|
245 * |
|
246 * @param string aActor |
|
247 * The NetworkEventActor ID. |
|
248 * @param function aOnResponse |
|
249 * The function invoked when the response is received. |
|
250 */ |
|
251 getResponseHeaders: function WCC_getResponseHeaders(aActor, aOnResponse) |
|
252 { |
|
253 let packet = { |
|
254 to: aActor, |
|
255 type: "getResponseHeaders", |
|
256 }; |
|
257 this._client.request(packet, aOnResponse); |
|
258 }, |
|
259 |
|
260 /** |
|
261 * Retrieve the response cookies from the given NetworkEventActor. |
|
262 * |
|
263 * @param string aActor |
|
264 * The NetworkEventActor ID. |
|
265 * @param function aOnResponse |
|
266 * The function invoked when the response is received. |
|
267 */ |
|
268 getResponseCookies: function WCC_getResponseCookies(aActor, aOnResponse) |
|
269 { |
|
270 let packet = { |
|
271 to: aActor, |
|
272 type: "getResponseCookies", |
|
273 }; |
|
274 this._client.request(packet, aOnResponse); |
|
275 }, |
|
276 |
|
277 /** |
|
278 * Retrieve the response content from the given NetworkEventActor. |
|
279 * |
|
280 * @param string aActor |
|
281 * The NetworkEventActor ID. |
|
282 * @param function aOnResponse |
|
283 * The function invoked when the response is received. |
|
284 */ |
|
285 getResponseContent: function WCC_getResponseContent(aActor, aOnResponse) |
|
286 { |
|
287 let packet = { |
|
288 to: aActor, |
|
289 type: "getResponseContent", |
|
290 }; |
|
291 this._client.request(packet, aOnResponse); |
|
292 }, |
|
293 |
|
294 /** |
|
295 * Retrieve the timing information for the given NetworkEventActor. |
|
296 * |
|
297 * @param string aActor |
|
298 * The NetworkEventActor ID. |
|
299 * @param function aOnResponse |
|
300 * The function invoked when the response is received. |
|
301 */ |
|
302 getEventTimings: function WCC_getEventTimings(aActor, aOnResponse) |
|
303 { |
|
304 let packet = { |
|
305 to: aActor, |
|
306 type: "getEventTimings", |
|
307 }; |
|
308 this._client.request(packet, aOnResponse); |
|
309 }, |
|
310 |
|
311 /** |
|
312 * Send a HTTP request with the given data. |
|
313 * |
|
314 * @param string aData |
|
315 * The details of the HTTP request. |
|
316 * @param function aOnResponse |
|
317 * The function invoked when the response is received. |
|
318 */ |
|
319 sendHTTPRequest: function WCC_sendHTTPRequest(aData, aOnResponse) { |
|
320 let packet = { |
|
321 to: this._actor, |
|
322 type: "sendHTTPRequest", |
|
323 request: aData |
|
324 }; |
|
325 this._client.request(packet, aOnResponse); |
|
326 }, |
|
327 |
|
328 /** |
|
329 * Start the given Web Console listeners. |
|
330 * |
|
331 * @see this.LISTENERS |
|
332 * @param array aListeners |
|
333 * Array of listeners you want to start. See this.LISTENERS for |
|
334 * known listeners. |
|
335 * @param function aOnResponse |
|
336 * Function to invoke when the server response is received. |
|
337 */ |
|
338 startListeners: function WCC_startListeners(aListeners, aOnResponse) |
|
339 { |
|
340 let packet = { |
|
341 to: this._actor, |
|
342 type: "startListeners", |
|
343 listeners: aListeners, |
|
344 }; |
|
345 this._client.request(packet, aOnResponse); |
|
346 }, |
|
347 |
|
348 /** |
|
349 * Stop the given Web Console listeners. |
|
350 * |
|
351 * @see this.LISTENERS |
|
352 * @param array aListeners |
|
353 * Array of listeners you want to stop. See this.LISTENERS for |
|
354 * known listeners. |
|
355 * @param function aOnResponse |
|
356 * Function to invoke when the server response is received. |
|
357 */ |
|
358 stopListeners: function WCC_stopListeners(aListeners, aOnResponse) |
|
359 { |
|
360 let packet = { |
|
361 to: this._actor, |
|
362 type: "stopListeners", |
|
363 listeners: aListeners, |
|
364 }; |
|
365 this._client.request(packet, aOnResponse); |
|
366 }, |
|
367 |
|
368 /** |
|
369 * Return an instance of LongStringClient for the given long string grip. |
|
370 * |
|
371 * @param object aGrip |
|
372 * The long string grip returned by the protocol. |
|
373 * @return object |
|
374 * The LongStringClient for the given long string grip. |
|
375 */ |
|
376 longString: function WCC_longString(aGrip) |
|
377 { |
|
378 if (aGrip.actor in this._longStrings) { |
|
379 return this._longStrings[aGrip.actor]; |
|
380 } |
|
381 |
|
382 let client = new LongStringClient(this._client, aGrip); |
|
383 this._longStrings[aGrip.actor] = client; |
|
384 return client; |
|
385 }, |
|
386 |
|
387 /** |
|
388 * Close the WebConsoleClient. This stops all the listeners on the server and |
|
389 * detaches from the console actor. |
|
390 * |
|
391 * @param function aOnResponse |
|
392 * Function to invoke when the server response is received. |
|
393 */ |
|
394 close: function WCC_close(aOnResponse) |
|
395 { |
|
396 this.stopListeners(null, aOnResponse); |
|
397 this._longStrings = null; |
|
398 this._client = null; |
|
399 }, |
|
400 }; |