15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2010 Google Inc. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions of source code must retain the above copyright
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer.
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions in binary form must reproduce the above
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution.
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Neither the name of Google Inc. nor the names of its
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission.
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.Object}
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DebuggerModel = function()
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InspectorBackend.registerDebuggerDispatcher(new WebInspector.DebuggerDispatcher(this));
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
39a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    /** @type {?WebInspector.DebuggerPausedDetails} */
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._debuggerPausedDetails = null;
41a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    /** @type {!Object.<string, !WebInspector.Script>} */
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._scripts = {};
43521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    /** @type {!Object.<!string, !Array.<!WebInspector.Script>>} */
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._scriptsBySourceURL = {};
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._canSetScriptSource = false;
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._breakpointsActive = true;
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.settings.pauseOnExceptionStateString = WebInspector.settings.createSetting("pauseOnExceptionStateString", WebInspector.DebuggerModel.PauseOnExceptionsState.DontPauseOnExceptions);
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.settings.pauseOnExceptionStateString.addChangeListener(this._pauseOnExceptionStateChanged, this);
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
52a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    WebInspector.settings.enableAsyncStackTraces.addChangeListener(this._asyncStackTracesStateChanged, this);
53a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)
5453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    this.enableDebugger();
55f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)
56f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    WebInspector.DebuggerModel.applySkipStackFrameSettings();
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Keep these in sync with WebCore::ScriptDebugServer
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DebuggerModel.PauseOnExceptionsState = {
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DontPauseOnExceptions : "none",
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    PauseOnAllExceptions : "all",
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    PauseOnUncaughtExceptions: "uncaught"
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @implements {WebInspector.RawLocation}
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} scriptId
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} lineNumber
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} columnNumber
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DebuggerModel.Location = function(scriptId, lineNumber, columnNumber)
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.scriptId = scriptId;
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.lineNumber = lineNumber;
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.columnNumber = columnNumber;
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DebuggerModel.Events = {
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DebuggerWasEnabled: "DebuggerWasEnabled",
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DebuggerWasDisabled: "DebuggerWasDisabled",
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DebuggerPaused: "DebuggerPaused",
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DebuggerResumed: "DebuggerResumed",
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ParsedScriptSource: "ParsedScriptSource",
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    FailedToParseScriptSource: "FailedToParseScriptSource",
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    BreakpointResolved: "BreakpointResolved",
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    GlobalObjectCleared: "GlobalObjectCleared",
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    CallFrameSelected: "CallFrameSelected",
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ConsoleCommandEvaluatedInSelectedCallFrame: "ConsoleCommandEvaluatedInSelectedCallFrame",
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    BreakpointsActiveStateChanged: "BreakpointsActiveStateChanged"
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DebuggerModel.BreakReason = {
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DOM: "DOM",
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    EventListener: "EventListener",
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    XHR: "XHR",
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Exception: "exception",
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Assert: "assert",
1005267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    CSPViolation: "CSPViolation",
1015267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    DebugCommand: "debugCommand"
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DebuggerModel.prototype = {
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    debuggerEnabled: function()
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return !!this._debuggerEnabled;
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    enableDebugger: function()
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._debuggerEnabled)
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
118e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)        /**
119e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         * @param {?Protocol.Error} error
120e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         * @param {boolean} result
121e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         * @this {WebInspector.DebuggerModel}
122e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         */
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function callback(error, result)
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._canSetScriptSource = result;
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DebuggerAgent.canSetScriptSource(callback.bind(this));
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DebuggerAgent.enable(this._debuggerWasEnabled.bind(this));
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    disableDebugger: function()
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!this._debuggerEnabled)
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DebuggerAgent.disable(this._debuggerWasDisabled.bind(this));
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1401e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)     * @param {boolean} skip
1411e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)     * @param {boolean=} untilReload
1421e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)     */
1431e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    skipAllPauses: function(skip, untilReload)
1441e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    {
1451e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        if (this._skipAllPausesTimeout) {
1461e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)            clearTimeout(this._skipAllPausesTimeout);
1471e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)            delete this._skipAllPausesTimeout;
1481e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        }
1491e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        DebuggerAgent.setSkipAllPauses(skip, untilReload);
1501e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    },
1511e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
1521e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    /**
1531e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)     * @param {number} timeout
1541e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)     */
1551e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    skipAllPausesUntilReloadOrTimeout: function(timeout)
1561e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    {
1571e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        if (this._skipAllPausesTimeout)
1581e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)            clearTimeout(this._skipAllPausesTimeout);
1591e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        DebuggerAgent.setSkipAllPauses(true, true);
1601e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        // If reload happens before the timeout, the flag will be already unset and the timeout callback won't change anything.
1611e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        this._skipAllPausesTimeout = setTimeout(this.skipAllPauses.bind(this, false), timeout);
1621e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    },
1631e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
1641e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    /**
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    canSetScriptSource: function()
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._canSetScriptSource;
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _debuggerWasEnabled: function()
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._debuggerEnabled = true;
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._pauseOnExceptionStateChanged();
176a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        this._asyncStackTracesStateChanged();
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.DebuggerWasEnabled);
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _pauseOnExceptionStateChanged: function()
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DebuggerAgent.setPauseOnExceptions(WebInspector.settings.pauseOnExceptionStateString.get());
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
185a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    _asyncStackTracesStateChanged: function()
186a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    {
187a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        const maxAsyncStackChainDepth = 4;
188b10519f489455182a6cfdee102d90bec34a43657Ben Murdoch        var enabled = WebInspector.settings.enableAsyncStackTraces.get() && WebInspector.experimentsSettings.asyncStackTraces.isEnabled();
189a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        DebuggerAgent.setAsyncCallStackDepth(enabled ? maxAsyncStackChainDepth : 0);
190a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    },
191a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _debuggerWasDisabled: function()
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._debuggerEnabled = false;
1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.DebuggerWasDisabled);
1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
199a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.DebuggerModel.Location} rawLocation
2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    continueToLocation: function(rawLocation)
2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DebuggerAgent.continueToLocation(rawLocation);
2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
207a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.DebuggerModel.Location} rawLocation
208e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)     */
209e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    stepIntoSelection: function(rawLocation)
210e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    {
211e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        /**
212a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!WebInspector.DebuggerModel.Location} requestedLocation
213e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)         * @param {?string} error
214e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         * @this {WebInspector.DebuggerModel}
215e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)         */
216e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        function callback(requestedLocation, error)
217e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        {
218e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)           if (error)
219e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)               return;
220e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)           this._pendingStepIntoLocation = requestedLocation;
221e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        };
222e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        DebuggerAgent.continueToLocation(rawLocation, true, callback.bind(this, rawLocation));
223e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    },
224e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
2251e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    stepInto: function()
2261e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    {
2271e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        function callback()
2281e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        {
2291e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)            DebuggerAgent.stepInto();
2301e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        }
2311e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        DebuggerAgent.setOverlayMessage(undefined, callback.bind(this));
2321e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    },
2331e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
2341e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    stepOver: function()
2351e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    {
2361e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        function callback()
2371e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        {
2381e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)            DebuggerAgent.stepOver();
2391e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        }
2401e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        DebuggerAgent.setOverlayMessage(undefined, callback.bind(this));
2411e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    },
2421e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
2431e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    stepOut: function()
2441e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    {
2451e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        function callback()
2461e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        {
2471e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)            DebuggerAgent.stepOut();
2481e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        }
2491e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        DebuggerAgent.setOverlayMessage(undefined, callback.bind(this));
2501e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    },
2511e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
2521e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    resume: function()
2531e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    {
2541e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        function callback()
2551e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        {
2561e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)            DebuggerAgent.resume();
2571e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        }
2581e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        DebuggerAgent.setOverlayMessage(undefined, callback.bind(this));
2591e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    },
2601e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
261e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    /**
262a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.DebuggerModel.Location} rawLocation
2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} condition
264a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(?DebuggerAgent.BreakpointId, !Array.<!WebInspector.DebuggerModel.Location>):void=} callback
2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setBreakpointByScriptLocation: function(rawLocation, condition, callback)
2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var script = this.scriptForId(rawLocation.scriptId);
2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (script.sourceURL)
2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.setBreakpointByURL(script.sourceURL, rawLocation.lineNumber, rawLocation.columnNumber, condition, callback);
2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        else
2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.setBreakpointBySourceId(rawLocation, condition, callback);
2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} url
2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} lineNumber
2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number=} columnNumber
2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string=} condition
280a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(?DebuggerAgent.BreakpointId, !Array.<!WebInspector.DebuggerModel.Location>)=} callback
2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setBreakpointByURL: function(url, lineNumber, columnNumber, condition, callback)
2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // Adjust column if needed.
2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var minColumnNumber = 0;
2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var scripts = this._scriptsBySourceURL[url] || [];
2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var i = 0, l = scripts.length; i < l; ++i) {
2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var script = scripts[i];
2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (lineNumber === script.lineOffset)
2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                minColumnNumber = minColumnNumber ? Math.min(minColumnNumber, script.columnOffset) : script.columnOffset;
2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        columnNumber = Math.max(columnNumber, minColumnNumber);
2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @this {WebInspector.DebuggerModel}
2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
297a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!DebuggerAgent.BreakpointId} breakpointId
298a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!Array.<!DebuggerAgent.Location>} locations
2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function didSetBreakpoint(error, breakpointId, locations)
3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (callback) {
303a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)                var rawLocations = /** @type {!Array.<!WebInspector.DebuggerModel.Location>} */ (locations);
3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                callback(error ? null : breakpointId, rawLocations);
3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
307e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        DebuggerAgent.setBreakpointByUrl(lineNumber, url, undefined, columnNumber, condition, undefined, didSetBreakpoint.bind(this));
3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.userMetrics.ScriptsBreakpointSet.record();
3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
312a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.DebuggerModel.Location} rawLocation
3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} condition
314a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(?DebuggerAgent.BreakpointId, !Array.<!WebInspector.DebuggerModel.Location>)=} callback
3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setBreakpointBySourceId: function(rawLocation, condition, callback)
3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @this {WebInspector.DebuggerModel}
3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
321a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!DebuggerAgent.BreakpointId} breakpointId
322a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!DebuggerAgent.Location} actualLocation
3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function didSetBreakpoint(error, breakpointId, actualLocation)
3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (callback) {
327a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)                var rawLocation = /** @type {!WebInspector.DebuggerModel.Location} */ (actualLocation);
3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                callback(error ? null : breakpointId, [rawLocation]);
3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DebuggerAgent.setBreakpoint(rawLocation, condition, didSetBreakpoint.bind(this));
3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.userMetrics.ScriptsBreakpointSet.record();
3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
336a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DebuggerAgent.BreakpointId} breakpointId
3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?Protocol.Error)=} callback
3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    removeBreakpoint: function(breakpointId, callback)
3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DebuggerAgent.removeBreakpoint(breakpointId, callback);
3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
345a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DebuggerAgent.BreakpointId} breakpointId
346a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DebuggerAgent.Location} location
3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _breakpointResolved: function(breakpointId, location)
3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointResolved, {breakpointId: breakpointId, location: location});
3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _globalObjectCleared: function()
3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._setDebuggerPausedDetails(null);
3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._reset();
3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.GlobalObjectCleared);
3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _reset: function()
3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._scripts = {};
3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._scriptsBySourceURL = {};
3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
367a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!Object.<string, !WebInspector.Script>}
3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get scripts()
3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._scripts;
3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
375a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DebuggerAgent.ScriptId} scriptId
376a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!WebInspector.Script}
3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    scriptForId: function(scriptId)
3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._scripts[scriptId] || null;
3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
384521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)     * @return {!Array.<!WebInspector.Script>}
385521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)     */
386521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    scriptsForSourceURL: function(sourceURL)
387521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    {
388521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        if (!sourceURL)
389521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)            return [];
390521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        return this._scriptsBySourceURL[sourceURL] || [];
391521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    },
392521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)
393521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    /**
394a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DebuggerAgent.ScriptId} scriptId
3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} newSource
396a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(?Protocol.Error, !DebuggerAgent.SetScriptSourceError=)} callback
3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setScriptSource: function(scriptId, newSource, callback)
3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._scripts[scriptId].editSource(newSource, this._didEditScriptSource.bind(this, scriptId, newSource, callback));
4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
404a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DebuggerAgent.ScriptId} scriptId
4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} newSource
406a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(?Protocol.Error, !DebuggerAgent.SetScriptSourceError=)} callback
4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {?Protocol.Error} error
408a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DebuggerAgent.SetScriptSourceError=} errorData
409a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Array.<!DebuggerAgent.CallFrame>=} callFrames
410a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DebuggerAgent.StackTrace=} asyncStackTrace
411e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)     * @param {boolean=} needsStepIn
4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
413a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    _didEditScriptSource: function(scriptId, newSource, callback, error, errorData, callFrames, asyncStackTrace, needsStepIn)
4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
415591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        callback(error, errorData);
416e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        if (needsStepIn)
4171e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)            this.stepInto();
418e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        else if (!error && callFrames && callFrames.length)
419a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            this._pausedScript(callFrames, this._debuggerPausedDetails.reason, this._debuggerPausedDetails.auxData, this._debuggerPausedDetails.breakpointIds, asyncStackTrace);
4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
423a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {?Array.<!WebInspector.DebuggerModel.CallFrame>}
4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get callFrames()
4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._debuggerPausedDetails ? this._debuggerPausedDetails.callFrames : null;
4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {?WebInspector.DebuggerPausedDetails}
4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    debuggerPausedDetails: function()
4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._debuggerPausedDetails;
4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {?WebInspector.DebuggerPausedDetails} debuggerPausedDetails
4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _setDebuggerPausedDetails: function(debuggerPausedDetails)
4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._debuggerPausedDetails)
4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._debuggerPausedDetails.dispose();
4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._debuggerPausedDetails = debuggerPausedDetails;
4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._debuggerPausedDetails)
4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.DebuggerPaused, this._debuggerPausedDetails);
4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (debuggerPausedDetails) {
4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.setSelectedCallFrame(debuggerPausedDetails.callFrames[0]);
4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            DebuggerAgent.setOverlayMessage(WebInspector.UIString("Paused in debugger"));
4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        } else {
4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.setSelectedCallFrame(null);
4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            DebuggerAgent.setOverlayMessage();
4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
458a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Array.<!DebuggerAgent.CallFrame>} callFrames
4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} reason
460a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Object|undefined} auxData
461a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Array.<string>} breakpointIds
462a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DebuggerAgent.StackTrace=} asyncStackTrace
4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
464a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    _pausedScript: function(callFrames, reason, auxData, breakpointIds, asyncStackTrace)
4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
466e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        if (this._pendingStepIntoLocation) {
467e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)            var requestedLocation = this._pendingStepIntoLocation;
468e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)            delete this._pendingStepIntoLocation;
469e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
470e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)            if (callFrames.length > 0) {
471e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)                var topLocation = callFrames[0].location;
472e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)                if (topLocation.lineNumber == requestedLocation.lineNumber && topLocation.columnNumber == requestedLocation.columnNumber && topLocation.scriptId == requestedLocation.scriptId) {
4731e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)                    this.stepInto();
474e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)                    return;
475e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)                }
476e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)            }
477e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        }
478e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
479a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        this._setDebuggerPausedDetails(new WebInspector.DebuggerPausedDetails(callFrames, reason, auxData, breakpointIds, asyncStackTrace));
4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _resumedScript: function()
4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._setDebuggerPausedDetails(null);
4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.DebuggerResumed);
4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
489a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DebuggerAgent.ScriptId} scriptId
4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} sourceURL
4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} startLine
4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} startColumn
4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} endLine
4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} endColumn
4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} isContentScript
4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string=} sourceMapURL
4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean=} hasSourceURL
4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _parsedScriptSource: function(scriptId, sourceURL, startLine, startColumn, endLine, endColumn, isContentScript, sourceMapURL, hasSourceURL)
5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var script = new WebInspector.Script(scriptId, sourceURL, startLine, startColumn, endLine, endColumn, isContentScript, sourceMapURL, hasSourceURL);
5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._registerScript(script);
5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.ParsedScriptSource, script);
5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
507a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.Script} script
5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _registerScript: function(script)
5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._scripts[script.scriptId] = script;
512521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        if (script.isAnonymousScript())
513521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)            return;
514521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)
515521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        var scripts = this._scriptsBySourceURL[script.sourceURL];
516521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        if (!scripts) {
517521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)            scripts = [];
518521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)            this._scriptsBySourceURL[script.sourceURL] = scripts;
5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
520521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        scripts.push(script);
5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
524a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.Script} script
5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} lineNumber
5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} columnNumber
527a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {?WebInspector.DebuggerModel.Location}
5285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    createRawLocation: function(script, lineNumber, columnNumber)
5305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (script.sourceURL)
5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return this.createRawLocationByURL(script.sourceURL, lineNumber, columnNumber)
5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return new WebInspector.DebuggerModel.Location(script.scriptId, lineNumber, columnNumber);
5345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} sourceURL
5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} lineNumber
5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} columnNumber
540a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {?WebInspector.DebuggerModel.Location}
5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    createRawLocationByURL: function(sourceURL, lineNumber, columnNumber)
5435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var closestScript = null;
5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var scripts = this._scriptsBySourceURL[sourceURL] || [];
5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var i = 0, l = scripts.length; i < l; ++i) {
5475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var script = scripts[i];
5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (!closestScript)
5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                closestScript = script;
5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (script.lineOffset > lineNumber || (script.lineOffset === lineNumber && script.columnOffset > columnNumber))
5515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                continue;
5525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (script.endLine < lineNumber || (script.endLine === lineNumber && script.endColumn <= columnNumber))
5535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                continue;
5545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            closestScript = script;
5555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            break;
5565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
5575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return closestScript ? new WebInspector.DebuggerModel.Location(closestScript.scriptId, lineNumber, columnNumber) : null;
5585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
5615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
5625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    isPaused: function()
5645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return !!this.debuggerPausedDetails();
5665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
5695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {?WebInspector.DebuggerModel.CallFrame} callFrame
5705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setSelectedCallFrame: function(callFrame)
5725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._selectedCallFrame = callFrame;
5745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!this._selectedCallFrame)
5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
5765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.CallFrameSelected, callFrame);
5785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
5815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {?WebInspector.DebuggerModel.CallFrame}
5825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    selectedCallFrame: function()
5845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._selectedCallFrame;
5865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
589a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!DebuggerAgent.CallFrameId|undefined}
5901e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)     */
5911e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    _selectedCallFrameId: function()
5921e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    {
5931e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        var callFrame = this.selectedCallFrame();
5941e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        return callFrame ? callFrame.id : undefined;
5951e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    },
5961e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
5971e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    /**
5985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} code
5995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} objectGroup
6005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} includeCommandLineAPI
6015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} doNotPauseOnExceptionsAndMuteConsole
6025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} returnByValue
6035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} generatePreview
604a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(?WebInspector.RemoteObject, boolean, ?RuntimeAgent.RemoteObject=)} callback
6055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    evaluateOnSelectedCallFrame: function(code, objectGroup, includeCommandLineAPI, doNotPauseOnExceptionsAndMuteConsole, returnByValue, generatePreview, callback)
6075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
6095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?RuntimeAgent.RemoteObject} result
6105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {boolean=} wasThrown
611e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         * @this {WebInspector.DebuggerModel}
6125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
6135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function didEvaluate(result, wasThrown)
6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
615a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            if (!result)
616a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)                callback(null, false);
617a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            else if (returnByValue)
6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                callback(null, !!wasThrown, wasThrown ? null : result);
6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            else
6205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                callback(WebInspector.RemoteObject.fromPayload(result), !!wasThrown);
6215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (objectGroup === "console")
6235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.ConsoleCommandEvaluatedInSelectedCallFrame);
6245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
6255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.selectedCallFrame().evaluate(code, objectGroup, includeCommandLineAPI, doNotPauseOnExceptionsAndMuteConsole, returnByValue, generatePreview, didEvaluate.bind(this));
6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
630a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(!Object)} callback
6315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    getSelectedCallFrameVariables: function(callback)
6335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var result = { this: true };
6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var selectedCallFrame = this._selectedCallFrame;
6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!selectedCallFrame)
6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            callback(result);
6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var pendingRequests = 0;
6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function propertiesCollected(properties)
6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
6445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            for (var i = 0; properties && i < properties.length; ++i)
6455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                result[properties[i].name] = true;
6465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (--pendingRequests == 0)
6475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                callback(result);
6485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var i = 0; i < selectedCallFrame.scopeChain.length; ++i) {
6515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var scope = selectedCallFrame.scopeChain[i];
6525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var object = WebInspector.RemoteObject.fromPayload(scope.object);
6535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            pendingRequests++;
654591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch            object.getAllProperties(false, propertiesCollected);
6555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} active
6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
6615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setBreakpointsActive: function(active)
6625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._breakpointsActive === active)
6645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
6655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._breakpointsActive = active;
6665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DebuggerAgent.setBreakpointsActive(active);
6675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointsActiveStateChanged, active);
6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    breakpointsActive: function()
6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._breakpointsActive;
6765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
679a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.DebuggerModel.Location} rawLocation
680a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(!WebInspector.UILocation):(boolean|undefined)} updateDelegate
681a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!WebInspector.Script.Location}
6825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
6835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    createLiveLocation: function(rawLocation, updateDelegate)
6845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var script = this._scripts[rawLocation.scriptId];
6865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return script.createLiveLocation(rawLocation, updateDelegate);
6875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
690a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.DebuggerModel.Location|!DebuggerAgent.Location} rawLocation
6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {?WebInspector.UILocation}
6925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    rawLocationToUILocation: function(rawLocation)
6945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var script = this._scripts[rawLocation.scriptId];
6965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!script)
6975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return null;
6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return script.rawLocationToUILocation(rawLocation.lineNumber, rawLocation.columnNumber);
6995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * Handles notification from JavaScript VM about updated stack (liveedit or frame restart action).
7035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @this {WebInspector.DebuggerModel}
704a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Array.<!DebuggerAgent.CallFrame>=} newCallFrames
705a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Object=} details
706a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DebuggerAgent.StackTrace=} asyncStackTrace
7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
708a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    callStackModified: function(newCallFrames, details, asyncStackTrace)
7095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
7105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // FIXME: declare this property in protocol and in JavaScript.
7115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (details && details["stack_update_needs_step_in"])
7121e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)            this.stepInto();
713a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        else if (newCallFrames && newCallFrames.length)
714a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            this._pausedScript(newCallFrames, this._debuggerPausedDetails.reason, this._debuggerPausedDetails.auxData, this._debuggerPausedDetails.breakpointIds, asyncStackTrace);
7155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    __proto__: WebInspector.Object.prototype
7185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
720f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)WebInspector.DebuggerModel.applySkipStackFrameSettings = function()
721f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles){
722f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    if (!WebInspector.experimentsSettings.frameworksDebuggingSupport.isEnabled())
723f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)        return;
724f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    var settings = WebInspector.settings;
725f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    var patternParameter = settings.skipStackFramesSwitch.get() ? settings.skipStackFramesPattern.get() : undefined;
726f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    DebuggerAgent.skipStackFrames(patternParameter);
727f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)}
728f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)
7295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DebuggerEventTypes = {
7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    JavaScriptPause: 0,
7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    JavaScriptBreakpoint: 1,
7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    NativeBreakpoint: 2
7335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
7345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
7365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
7375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @implements {DebuggerAgent.Dispatcher}
738a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.DebuggerModel} debuggerModel
7395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
7405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DebuggerDispatcher = function(debuggerModel)
7415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._debuggerModel = debuggerModel;
7435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DebuggerDispatcher.prototype = {
7465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
747a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Array.<!DebuggerAgent.CallFrame>} callFrames
7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} reason
749a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Object=} auxData
750a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Array.<string>=} breakpointIds
751a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DebuggerAgent.StackTrace=} asyncStackTrace
7525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
753a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    paused: function(callFrames, reason, auxData, breakpointIds, asyncStackTrace)
7545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
755a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        this._debuggerModel._pausedScript(callFrames, reason, auxData, breakpointIds || [], asyncStackTrace);
7565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
758a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    /**
759a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @override
760a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     */
7615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    resumed: function()
7625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
7635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._debuggerModel._resumedScript();
7645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
766a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    /**
767a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @override
768a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     */
7695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    globalObjectCleared: function()
7705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._debuggerModel._globalObjectCleared();
7725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
775a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DebuggerAgent.ScriptId} scriptId
7765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} sourceURL
7775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} startLine
7785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} startColumn
7795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} endLine
7805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} endColumn
7815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean=} isContentScript
7825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string=} sourceMapURL
7835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean=} hasSourceURL
7845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
7855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    scriptParsed: function(scriptId, sourceURL, startLine, startColumn, endLine, endColumn, isContentScript, sourceMapURL, hasSourceURL)
7865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
7875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._debuggerModel._parsedScriptSource(scriptId, sourceURL, startLine, startColumn, endLine, endColumn, !!isContentScript, sourceMapURL, hasSourceURL);
7885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
7915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} sourceURL
7925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} source
7935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} startingLine
7945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} errorLine
7955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} errorMessage
7965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
7975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    scriptFailedToParse: function(sourceURL, source, startingLine, errorLine, errorMessage)
7985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
7995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
802a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DebuggerAgent.BreakpointId} breakpointId
803a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DebuggerAgent.Location} location
8045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    breakpointResolved: function(breakpointId, location)
8065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._debuggerModel._breakpointResolved(breakpointId, location);
8085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
8095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
8125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
813a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.Script} script
814a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!DebuggerAgent.CallFrame} payload
815a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {boolean=} isAsync
8165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
817a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)WebInspector.DebuggerModel.CallFrame = function(script, payload, isAsync)
8185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
8195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._script = script;
8205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._payload = payload;
821a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    /** @type {!Array.<!WebInspector.Script.Location>} */
8225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._locations = [];
823a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    this._isAsync = isAsync;
824a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)}
825a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)
826a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)/**
827a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Array.<!DebuggerAgent.CallFrame>} callFrames
828a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {boolean=} isAsync
829a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {!Array.<!WebInspector.DebuggerModel.CallFrame>}
830a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) */
831a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)WebInspector.DebuggerModel.CallFrame.fromPayloadArray = function(callFrames, isAsync)
832a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){
833a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    var result = [];
834a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    for (var i = 0; i < callFrames.length; ++i) {
835a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        var callFrame = callFrames[i];
836a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        var script = WebInspector.debuggerModel.scriptForId(callFrame.location.scriptId);
837a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        if (script)
838a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            result.push(new WebInspector.DebuggerModel.CallFrame(script, callFrame, isAsync));
839a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    }
840a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    return result;
8415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DebuggerModel.CallFrame.prototype = {
8445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
845a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!WebInspector.Script}
8465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get script()
8485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._script;
8505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
8535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
8545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get type()
8565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._payload.type;
8585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
861926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @return {string}
862926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
863926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    get id()
864926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
865926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return this._payload.callFrameId;
866926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
867926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
868926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
869a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!Array.<!DebuggerAgent.Scope>}
8705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get scopeChain()
8725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._payload.scopeChain;
8745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
877a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!RuntimeAgent.RemoteObject}
8785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get this()
8805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._payload.this;
8825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
885a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!RuntimeAgent.RemoteObject|undefined}
88651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)     */
88751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    get returnValue()
88851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    {
88951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)        return this._payload.returnValue;
89051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    },
89151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)
89251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    /**
8935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
8945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get functionName()
8965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._payload.functionName;
8985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
901a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!WebInspector.DebuggerModel.Location}
9025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
9035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get location()
9045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
905a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        var rawLocation = /** @type {!WebInspector.DebuggerModel.Location} */ (this._payload.location);
9065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return rawLocation;
9075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
9085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
910a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {boolean}
911a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     */
912a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    isAsync: function()
913a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    {
914a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        return !!this._isAsync;
915a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    },
916a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)
917a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    /**
9185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} code
9195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} objectGroup
9205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} includeCommandLineAPI
9215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} doNotPauseOnExceptionsAndMuteConsole
9225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} returnByValue
9235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} generatePreview
9245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?RuntimeAgent.RemoteObject, boolean=)=} callback
9255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
9265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    evaluate: function(code, objectGroup, includeCommandLineAPI, doNotPauseOnExceptionsAndMuteConsole, returnByValue, generatePreview, callback)
9275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
9285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
9295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @this {WebInspector.DebuggerModel.CallFrame}
9305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
931a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!RuntimeAgent.RemoteObject} result
9325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {boolean=} wasThrown
9335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
9345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function didEvaluateOnCallFrame(error, result, wasThrown)
9355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
9365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (error) {
9375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                console.error(error);
9385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                callback(null, false);
9395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                return;
9405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
9415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            callback(result, wasThrown);
9425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
9435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DebuggerAgent.evaluateOnCallFrame(this._payload.callFrameId, code, objectGroup, includeCommandLineAPI, doNotPauseOnExceptionsAndMuteConsole, returnByValue, generatePreview, didEvaluateOnCallFrame.bind(this));
9445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
9455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
9475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?Protocol.Error=)=} callback
9485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
9495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    restart: function(callback)
9505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
9515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
9525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @this {WebInspector.DebuggerModel.CallFrame}
9535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
954a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!Array.<!DebuggerAgent.CallFrame>=} callFrames
955a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!Object=} details
956a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!DebuggerAgent.StackTrace=} asyncStackTrace
9575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
958a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        function protocolCallback(error, callFrames, details, asyncStackTrace)
9595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
9605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (!error)
961a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)                WebInspector.debuggerModel.callStackModified(callFrames, details, asyncStackTrace);
9625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (callback)
9635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                callback(error);
9645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
9655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DebuggerAgent.restartFrame(this._payload.callFrameId, protocolCallback);
9665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
9675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
969a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(!Array.<!DebuggerAgent.Location>)} callback
970e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)     */
971e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    getStepIntoLocations: function(callback)
972e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    {
973e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        if (this._stepInLocations) {
974e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)            callback(this._stepInLocations.slice(0));
975e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)            return;
976e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        }
977e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        /**
978e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)         * @param {?string} error
979a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!Array.<!DebuggerAgent.Location>=} stepInPositions
980e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         * @this {WebInspector.DebuggerModel.CallFrame}
981e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)         */
982a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        function getStepInPositionsCallback(error, stepInPositions)
983a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        {
984a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            if (error)
985e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)                return;
986e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)            this._stepInLocations = stepInPositions;
987e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)            callback(this._stepInLocations.slice(0));
988e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        }
989e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        DebuggerAgent.getStepInPositions(this.id, getStepInPositionsCallback.bind(this));
990e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    },
991e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
992e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    /**
993a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(!WebInspector.UILocation):(boolean|undefined)} updateDelegate
9945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
9955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    createLiveLocation: function(updateDelegate)
9965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
9975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var location = this._script.createLiveLocation(this.location, updateDelegate);
9985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._locations.push(location);
9995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return location;
10005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
10015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1002a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    dispose: function()
10035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
10045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var i = 0; i < this._locations.length; ++i)
10055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._locations[i].dispose();
10065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._locations = [];
10075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
10085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
10115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
1012a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Array.<!WebInspector.DebuggerModel.CallFrame>} callFrames
1013a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {?WebInspector.DebuggerModel.StackTrace} asyncStackTrace
1014a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {string=} description
10155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
1016a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)WebInspector.DebuggerModel.StackTrace = function(callFrames, asyncStackTrace, description)
10175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1018a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    this.callFrames = callFrames;
1019a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    this.asyncStackTrace = asyncStackTrace;
1020a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    this.description = description;
1021a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)}
1022a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)
1023a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)/**
1024a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!DebuggerAgent.StackTrace=} payload
1025a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {boolean=} isAsync
1026a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {?WebInspector.DebuggerModel.StackTrace}
1027a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) */
1028a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)WebInspector.DebuggerModel.StackTrace.fromPayload = function(payload, isAsync)
1029a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){
1030a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    if (!payload)
1031a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        return null;
1032a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    var callFrames = WebInspector.DebuggerModel.CallFrame.fromPayloadArray(payload.callFrames, isAsync);
1033a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    if (!callFrames.length)
1034a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        return null;
1035a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    var asyncStackTrace = WebInspector.DebuggerModel.StackTrace.fromPayload(payload.asyncStackTrace, true);
1036a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    return new WebInspector.DebuggerModel.StackTrace(callFrames, asyncStackTrace, payload.description);
1037a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)}
1038a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)
1039a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)WebInspector.DebuggerModel.StackTrace.prototype = {
1040a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    dispose: function()
1041a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    {
1042a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        for (var i = 0; i < this.callFrames.length; ++i)
1043a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            this.callFrames[i].dispose();
1044a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        if (this.asyncStackTrace)
1045a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            this.asyncStackTrace.dispose();
10465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1047a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)}
1048a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)
1049a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)/**
1050a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @constructor
1051a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Array.<!DebuggerAgent.CallFrame>} callFrames
1052a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {string} reason
1053a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Object|undefined} auxData
1054a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Array.<string>} breakpointIds
1055a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!DebuggerAgent.StackTrace=} asyncStackTrace
1056a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) */
1057a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)WebInspector.DebuggerPausedDetails = function(callFrames, reason, auxData, breakpointIds, asyncStackTrace)
1058a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){
1059a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    this.callFrames = WebInspector.DebuggerModel.CallFrame.fromPayloadArray(callFrames);
10605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.reason = reason;
10615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.auxData = auxData;
10625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    this.breakpointIds = breakpointIds;
1063a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    this.asyncStackTrace = WebInspector.DebuggerModel.StackTrace.fromPayload(asyncStackTrace, true);
10645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DebuggerPausedDetails.prototype = {
10675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    dispose: function()
10685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1069a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        for (var i = 0; i < this.callFrames.length; ++i)
1070a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            this.callFrames[i].dispose();
1071a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        if (this.asyncStackTrace)
1072a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            this.asyncStackTrace.dispose();
10735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
10745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
1077e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles) * @type {!WebInspector.DebuggerModel}
10785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
1079e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)WebInspector.debuggerModel;
1080