Exemple #1
0
    /**
     * 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);
 }
Exemple #4
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();
     });
 };
Exemple #5
0
 $.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);
 });
Exemple #6
0
    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();
            }
        });
    }
Exemple #7
0
        $.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);
        });
Exemple #8
0
     }, 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();
     }
 }
Exemple #9
0
    /**
     * @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();
    }
Exemple #10
0
    // 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();
            }
        });
    }
Exemple #11
0
    // 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();
            }
        });
    }
Exemple #12
0
    /**
     * @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();
                }
            });
        });
    }
Exemple #13
0
 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);
 });