Skip to content
This repository was archived by the owner on Sep 6, 2021. It is now read-only.

Commit 7596c86

Browse files
committed
Merge pull request #3142 from iwehrman/iwehrman/live-development-startup-refactoring
[Review only] Harden Live Development startup
2 parents 3102c44 + c1cb696 commit 7596c86

6 files changed

Lines changed: 247 additions & 91 deletions

File tree

src/LiveDevelopment/Inspector/Inspector.js

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -151,11 +151,19 @@ define(function Inspector(require, exports, module) {
151151

152152
/** WebSocket reported an error */
153153
function _onError(error) {
154+
if (_connectDeferred) {
155+
_connectDeferred.reject();
156+
_connectDeferred = null;
157+
}
154158
$exports.triggerHandler("error", [error]);
155159
}
156160

157161
/** WebSocket did open */
158162
function _onConnect() {
163+
if (_connectDeferred) {
164+
_connectDeferred.resolve();
165+
_connectDeferred = null;
166+
}
159167
$exports.triggerHandler("connect");
160168
}
161169

@@ -186,11 +194,11 @@ define(function Inspector(require, exports, module) {
186194

187195
/** Public Functions *****************************************************/
188196

189-
/** Get the available debugger sockets from the remote debugger
197+
/** Get a list of the available windows/tabs/extensions that are remote-debuggable
190198
* @param {string} host IP or name
191199
* @param {integer} debugger port
192200
*/
193-
function getAvailableSockets(host, port) {
201+
function getDebuggableWindows(host, port) {
194202
if (!host) {
195203
host = "127.0.0.1";
196204
}
@@ -264,17 +272,14 @@ define(function Inspector(require, exports, module) {
264272
}
265273
var deferred = new $.Deferred();
266274
_connectDeferred = deferred;
267-
var promise = getAvailableSockets();
275+
var promise = getDebuggableWindows();
268276
promise.done(function onGetAvailableSockets(response) {
269-
if (deferred.isRejected()) {
270-
return;
271-
}
272277
var i, page;
273278
for (i in response) {
274279
page = response[i];
275280
if (page.webSocketDebuggerUrl && page.url.indexOf(url) === 0) {
276281
connect(page.webSocketDebuggerUrl);
277-
deferred.resolve();
282+
// _connectDeferred may be resolved by onConnect or rejected by onError
278283
return;
279284
}
280285
}
@@ -288,7 +293,7 @@ define(function Inspector(require, exports, module) {
288293

289294
/** Check if the inspector is connected */
290295
function connected() {
291-
return _socket !== undefined;
296+
return _socket !== undefined && _socket.readyState === WebSocket.OPEN;
292297
}
293298

294299
/** Initialize the Inspector
@@ -297,25 +302,23 @@ define(function Inspector(require, exports, module) {
297302
*/
298303
function init(theConfig) {
299304
exports.config = theConfig;
300-
var request = new XMLHttpRequest();
301-
request.open("GET", "LiveDevelopment/Inspector/Inspector.json");
302-
request.onload = function onLoad() {
303-
var InspectorJSON = JSON.parse(request.response);
304-
var i, j, domain, domainDef, command;
305-
for (i in InspectorJSON.domains) {
306-
domain = InspectorJSON.domains[i];
307-
exports[domain.domain] = {};
308-
for (j in domain.commands) {
309-
command = domain.commands[j];
310-
exports[domain.domain][command.name] = _send.bind(undefined, domain.domain + "." + command.name, command.parameters);
311-
}
305+
306+
var InspectorText = require("text!LiveDevelopment/Inspector/Inspector.json"),
307+
InspectorJSON = JSON.parse(InspectorText);
308+
309+
var i, j, domain, domainDef, command;
310+
for (i in InspectorJSON.domains) {
311+
domain = InspectorJSON.domains[i];
312+
exports[domain.domain] = {};
313+
for (j in domain.commands) {
314+
command = domain.commands[j];
315+
exports[domain.domain][command.name] = _send.bind(undefined, domain.domain + "." + command.name, command.parameters);
312316
}
313-
};
314-
request.send(null);
317+
}
315318
}
316319

317320
// Export public functions
318-
exports.getAvailableSockets = getAvailableSockets;
321+
exports.getDebuggableWindows = getDebuggableWindows;
319322
exports.on = on;
320323
exports.off = off;
321324
exports.disconnect = disconnect;

0 commit comments

Comments
 (0)