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

[Review only] Harden Live Development startup #3142

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 26 additions & 23 deletions src/LiveDevelopment/Inspector/Inspector.js
Original file line number Diff line number Diff line change
Expand Up @@ -151,11 +151,19 @@ define(function Inspector(require, exports, module) {

/** WebSocket reported an error */
function _onError(error) {
if (_connectDeferred) {
_connectDeferred.reject();
_connectDeferred = null;
}
$exports.triggerHandler("error", [error]);
}

/** WebSocket did open */
function _onConnect() {
if (_connectDeferred) {
_connectDeferred.resolve();
_connectDeferred = null;
}
$exports.triggerHandler("connect");
}

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

/** Public Functions *****************************************************/

/** Get the available debugger sockets from the remote debugger
/** Get a list of the available windows/tabs/extensions that are remote-debuggable
* @param {string} host IP or name
* @param {integer} debugger port
*/
function getAvailableSockets(host, port) {
function getDebuggableWindows(host, port) {
if (!host) {
host = "127.0.0.1";
}
Expand Down Expand Up @@ -264,17 +272,14 @@ define(function Inspector(require, exports, module) {
}
var deferred = new $.Deferred();
_connectDeferred = deferred;
var promise = getAvailableSockets();
var promise = getDebuggableWindows();
promise.done(function onGetAvailableSockets(response) {
if (deferred.isRejected()) {
return;
}
var i, page;
for (i in response) {
page = response[i];
if (page.webSocketDebuggerUrl && page.url.indexOf(url) === 0) {
connect(page.webSocketDebuggerUrl);
deferred.resolve();
// _connectDeferred may be resolved by onConnect or rejected by onError
return;
}
}
Expand All @@ -288,7 +293,7 @@ define(function Inspector(require, exports, module) {

/** Check if the inspector is connected */
function connected() {
return _socket !== undefined;
return _socket !== undefined && _socket.readyState === WebSocket.OPEN;
}

/** Initialize the Inspector
Expand All @@ -297,25 +302,23 @@ define(function Inspector(require, exports, module) {
*/
function init(theConfig) {
exports.config = theConfig;
var request = new XMLHttpRequest();
request.open("GET", "LiveDevelopment/Inspector/Inspector.json");
request.onload = function onLoad() {
var InspectorJSON = JSON.parse(request.response);
var i, j, domain, domainDef, command;
for (i in InspectorJSON.domains) {
domain = InspectorJSON.domains[i];
exports[domain.domain] = {};
for (j in domain.commands) {
command = domain.commands[j];
exports[domain.domain][command.name] = _send.bind(undefined, domain.domain + "." + command.name, command.parameters);
}

var InspectorText = require("text!LiveDevelopment/Inspector/Inspector.json"),
InspectorJSON = JSON.parse(InspectorText);

var i, j, domain, domainDef, command;
for (i in InspectorJSON.domains) {
domain = InspectorJSON.domains[i];
exports[domain.domain] = {};
for (j in domain.commands) {
command = domain.commands[j];
exports[domain.domain][command.name] = _send.bind(undefined, domain.domain + "." + command.name, command.parameters);
}
};
request.send(null);
}
}

// Export public functions
exports.getAvailableSockets = getAvailableSockets;
exports.getDebuggableWindows = getDebuggableWindows;
exports.on = on;
exports.off = off;
exports.disconnect = disconnect;
Expand Down
Loading