/** * Close the connection and the associated window asynchronously * * @return {jQuery.Promise} Resolves once the connection is closed */ function close() { _closeReason = "explicit_close"; var deferred = $.Deferred(); /* * Finish closing the live development connection, including setting * the status accordingly. */ function cleanup() { _setStatus(STATUS_INACTIVE); deferred.resolve(); } if (Inspector.connected()) { var timer = window.setTimeout(cleanup, 5000); // 5 seconds Inspector.Runtime.evaluate("window.open('', '_self').close();", function (response) { Inspector.disconnect(); window.clearTimeout(timer); cleanup(); }); } else { cleanup(); } if (_openDeferred && _openDeferred.state() === "pending") { _openDeferred.reject(); } return deferred.promise(); }
/** Close the Connection */ function close() { if (Inspector.connected()) { Inspector.Runtime.evaluate("window.open('', '_self').close();"); } Inspector.disconnect(); _setStatus(STATUS_INACTIVE); }
/** Close the Connection */ function close() { if (Inspector.connected()) { Inspector.Runtime.evaluate("window.close()"); } Inspector.disconnect(); _setStatus(0); }
request.onload = function onLoad() { var run = "window._LD=" + request.response + "(" + LiveDevelopment.config.experimental + ")"; Inspector.Runtime.evaluate(run, function onEvaluate(res) { console.assert(!res.wasThrown, res.result.description); _objectId = res.result.objectId; _load.resolve(); }); };
$.when.apply(undefined, args).then(function onResolvedAllNodes() { var i, arg, params = []; for (i in arguments) { arg = args[i]; if (arg.objectId) { params.push({objectId: arg.objectId}); } else { params.push({value: arg}); } } Inspector.Runtime.callFunctionOn(_objectId, "_LD." + method, params, undefined, callback); });
var _intervalId; // interval used to send keepAlive events // WebInspector Event: Page.loadEventFired function _onLoadEventFired(event, res) { // res = {timestamp} var command = "window._LD=" + RemoteFunctions + "(" + LiveDevelopment.config.experimental + ")"; Inspector.Runtime.evaluate(command, function onEvaluate(response) { if (response.error || response.wasThrown) { _load.reject(null, response.error); } else { _objectId = response.result.objectId; _load.resolve(); } }); }
$.when.apply(undefined, args).done(function onResolvedAllNodes() { var params = []; args.forEach(function (arg) { if (arg.objectId) { params.push({objectId: arg.objectId}); } else { params.push({value: arg}); } }); Inspector.Runtime.callFunctionOn(objectId, method, params, undefined, callback) .then(deferred.resolve, deferred.reject); });
}, 10000); // 10 seconds /* * Asynchronously check to see if the interstitial page has * finished loading; if not, check again until timing out. */ function pollInterstitialPage() { if (keepPolling && Inspector.connected()) { Inspector.Runtime.evaluate("window.isBracketsLiveDevelopmentInterstitialPageLoaded", function (response) { var result = response.result; if (result.type === "boolean" && result.value) { window.clearTimeout(timer); deferred.resolve(); } else { window.setTimeout(pollInterstitialPage, 100); } }); } else { deferred.reject(); } }
/** * @private * While still connected to the Inspector, do cleanup for agents, * documents and server. * @param {boolean} doCloseWindow Use true to close the window/tab in the browser * @return {jQuery.Promise} A promise that is always resolved */ function _doInspectorDisconnect(doCloseWindow) { var closePromise, deferred = new $.Deferred(), connected = Inspector.connected(); $(Inspector.Page).off(".livedev"); $(Inspector).off(".livedev"); // Wait if agents are loading if (_loadAgentsPromise) { _loadAgentsPromise.always(unloadAgents); } else { unloadAgents(); } // Close live documents _closeDocuments(); if (_server) { // Stop listening for requests when disconnected _server.stop(); // Dispose server _server = null; } if (doCloseWindow && connected) { closePromise = Inspector.Runtime.evaluate("window.open('', '_self').close();"); // Add a timeout to continue cleanup if Inspector does not respond closePromise = Async.withTimeout(closePromise, 5000); } else { closePromise = new $.Deferred().resolve(); } // Disconnect WebSocket if connected closePromise.always(function () { if (Inspector.connected()) { Inspector.disconnect().always(deferred.resolve); } else { deferred.resolve(); } }); return deferred.promise(); }
// WebInspector Event: Page.frameNavigated function _onFrameNavigated(event, res) { // res = {timestamp} // inject RemoteFunctions var command = "window._LD=" + RemoteFunctions + "(" + LiveDevelopment.config.experimental + ");"; Inspector.Runtime.evaluate(command, function onEvaluate(response) { if (response.error || response.wasThrown) { _load.reject(response.error); } else { _objectId = response.result.objectId; _load.resolve(); _startKeepAliveInterval(); } }); }
// WebInspector Event: Page.frameNavigated function _onFrameNavigated(event, res) { // res = {frame} // Re-inject RemoteFunctions when navigating to a new page, but not if an iframe was loaded if (res.frame.parentId) { return; } _stopKeepAliveInterval(); // inject RemoteFunctions var command = "window._LD=" + RemoteFunctions + "(" + LiveDevelopment.config.experimental + ");"; Inspector.Runtime.evaluate(command, function onEvaluate(response) { if (response.error || response.wasThrown) { _load.reject(response.error); } else { _objectId = response.result.objectId; _load.resolve(); _startKeepAliveInterval(); } }); }
/** * @private * Load agents and navigate to the target document once the * interstitial page has finished loading. */ function _onInterstitialPageLoad() { Inspector.Runtime.evaluate("window.navigator.userAgent", function (uaResponse) { Inspector.setUserAgent(uaResponse.result.value); }); // Domains for some agents must be enabled first before loading var enablePromise = Inspector.Page.enable().then(_enableAgents); enablePromise.done(function () { // Some agents (e.g. DOMAgent and RemoteAgent) require us to // navigate to the page first before loading can complete. // To accomodate this, we load all agents and navigate in // parallel. // resolve/reject the open() promise after agents complete loadAgents().then(_openDeferred.resolve, _openDeferred.reject); _getInitialDocFromCurrent().done(function (doc) { if (doc && _liveDocument && doc === _liveDocument.doc) { // Navigate from interstitial to the document // Fires a frameNavigated event if (_server) { Inspector.Page.navigate(_server.pathToUrl(doc.file.fullPath)); } else { console.error("LiveDevelopment._onInterstitialPageLoad(): No server active"); } } else { // Unlikely that we would get to this state where // a connection is in process but there is no current // document close(); } }); }); }
Inspector.Debugger.setScriptSource(this.script.scriptId, src, function onSetScriptSource(res) { Inspector.Runtime.evaluate("if($)$(\"canvas\").each(function(i,e){if(e.rerender)e.rerender()})"); }.bind(this));
runs(function () { var promise = InspectorModule.Runtime.evaluate("window.open('', '_self').close()"); waitsForDone(promise, "Inspector.Runtime.evaluate", 5000); });