Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(417)

Unified Diff: third_party/WebKit/Source/platform/v8_inspector/DebuggerScript.js

Issue 2295913003: [DevTools] Switch from platform/v8_inspector to v8/v8-inspector.h. (Closed)
Patch Set: rebase Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/platform/v8_inspector/DebuggerScript.js
diff --git a/third_party/WebKit/Source/platform/v8_inspector/DebuggerScript.js b/third_party/WebKit/Source/platform/v8_inspector/DebuggerScript.js
deleted file mode 100644
index 18beac0e03ceea0d897f7d584a6a38984c51eddd..0000000000000000000000000000000000000000
--- a/third_party/WebKit/Source/platform/v8_inspector/DebuggerScript.js
+++ /dev/null
@@ -1,711 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-"use strict";
-
-(function () {
-
-var DebuggerScript = {};
-
-/** @enum */
-DebuggerScript.PauseOnExceptionsState = {
- DontPauseOnExceptions: 0,
- PauseOnAllExceptions: 1,
- PauseOnUncaughtExceptions: 2
-};
-
-DebuggerScript._pauseOnExceptionsState = DebuggerScript.PauseOnExceptionsState.DontPauseOnExceptions;
-Debug.clearBreakOnException();
-Debug.clearBreakOnUncaughtException();
-
-/**
- * @param {?CompileEvent} eventData
- */
-DebuggerScript.getAfterCompileScript = function(eventData)
-{
- var script = eventData.script().value();
- if (!script.is_debugger_script)
- return DebuggerScript._formatScript(eventData.script().value());
- return null;
-}
-
-/** @type {!Map<!ScopeType, string>} */
-DebuggerScript._scopeTypeNames = new Map();
-DebuggerScript._scopeTypeNames.set(ScopeType.Global, "global");
-DebuggerScript._scopeTypeNames.set(ScopeType.Local, "local");
-DebuggerScript._scopeTypeNames.set(ScopeType.With, "with");
-DebuggerScript._scopeTypeNames.set(ScopeType.Closure, "closure");
-DebuggerScript._scopeTypeNames.set(ScopeType.Catch, "catch");
-DebuggerScript._scopeTypeNames.set(ScopeType.Block, "block");
-DebuggerScript._scopeTypeNames.set(ScopeType.Script, "script");
-
-/**
- * @param {function()} fun
- * @return {?Array<!Scope>}
- */
-DebuggerScript.getFunctionScopes = function(fun)
-{
- var mirror = MakeMirror(fun);
- if (!mirror.isFunction())
- return null;
- var functionMirror = /** @type {!FunctionMirror} */(mirror);
- var count = functionMirror.scopeCount();
- if (count == 0)
- return null;
- var result = [];
- for (var i = 0; i < count; i++) {
- var scopeDetails = functionMirror.scope(i).details();
- var scopeObject = DebuggerScript._buildScopeObject(scopeDetails.type(), scopeDetails.object());
- if (!scopeObject)
- continue;
- result.push({
- type: /** @type {string} */(DebuggerScript._scopeTypeNames.get(scopeDetails.type())),
- object: scopeObject,
- name: scopeDetails.name() || ""
- });
- }
- return result;
-}
-
-/**
- * @param {Object} object
- * @return {?RawLocation}
- */
-DebuggerScript.getGeneratorObjectLocation = function(object)
-{
- var mirror = MakeMirror(object, true /* transient */);
- if (!mirror.isGenerator())
- return null;
- var generatorMirror = /** @type {!GeneratorMirror} */(mirror);
- var funcMirror = generatorMirror.func();
- if (!funcMirror.resolved())
- return null;
- var location = generatorMirror.sourceLocation() || funcMirror.sourceLocation();
- var script = funcMirror.script();
- if (script && location) {
- return {
- scriptId: "" + script.id(),
- lineNumber: location.line,
- columnNumber: location.column
- };
- }
- return null;
-}
-
-/**
- * @param {Object} object
- * @return {!Array<!{value: *}>|undefined}
- */
-DebuggerScript.getCollectionEntries = function(object)
-{
- var mirror = MakeMirror(object, true /* transient */);
- if (mirror.isMap())
- return /** @type {!MapMirror} */(mirror).entries();
- if (mirror.isSet() || mirror.isIterator()) {
- var result = [];
- var values = mirror.isSet() ? /** @type {!SetMirror} */(mirror).values() : /** @type {!IteratorMirror} */(mirror).preview();
- for (var i = 0; i < values.length; ++i)
- result.push({ value: values[i] });
- return result;
- }
-}
-
-/**
- * @param {string|undefined} contextData
- * @return {number}
- */
-DebuggerScript._executionContextId = function(contextData)
-{
- if (!contextData)
- return 0;
- var match = contextData.match(/^[^,]*,([^,]*),.*$/);
- if (!match)
- return 0;
- return parseInt(match[1], 10) || 0;
-}
-
-/**
- * @param {string|undefined} contextData
- * @return {string}
- */
-DebuggerScript._executionContextAuxData = function(contextData)
-{
- if (!contextData)
- return "";
- var match = contextData.match(/^[^,]*,[^,]*,(.*)$/);
- return match ? match[1] : "";
-}
-
-/**
- * @param {string} contextGroupId
- * @return {!Array<!FormattedScript>}
- */
-DebuggerScript.getScripts = function(contextGroupId)
-{
- var result = [];
- var scripts = Debug.scripts();
- var contextDataPrefix = null;
- if (contextGroupId)
- contextDataPrefix = contextGroupId + ",";
- for (var i = 0; i < scripts.length; ++i) {
- var script = scripts[i];
- if (contextDataPrefix) {
- if (!script.context_data)
- continue;
- // Context data is a string in the following format:
- // <contextGroupId>,<contextId>,<auxData>
- if (script.context_data.indexOf(contextDataPrefix) !== 0)
- continue;
- }
- if (script.is_debugger_script)
- continue;
- result.push(DebuggerScript._formatScript(script));
- }
- return result;
-}
-
-/**
- * @param {!Script} script
- * @return {!FormattedScript}
- */
-DebuggerScript._formatScript = function(script)
-{
- var lineEnds = script.line_ends;
- var lineCount = lineEnds.length;
- var endLine = script.line_offset + lineCount - 1;
- var endColumn;
- // V8 will not count last line if script source ends with \n.
- if (script.source[script.source.length - 1] === '\n') {
- endLine += 1;
- endColumn = 0;
- } else {
- if (lineCount === 1)
- endColumn = script.source.length + script.column_offset;
- else
- endColumn = script.source.length - (lineEnds[lineCount - 2] + 1);
- }
- return {
- id: script.id,
- name: script.nameOrSourceURL(),
- sourceURL: script.source_url,
- sourceMappingURL: script.source_mapping_url,
- source: script.source,
- startLine: script.line_offset,
- startColumn: script.column_offset,
- endLine: endLine,
- endColumn: endColumn,
- executionContextId: DebuggerScript._executionContextId(script.context_data),
- // Note that we cannot derive aux data from context id because of compilation cache.
- executionContextAuxData: DebuggerScript._executionContextAuxData(script.context_data)
- };
-}
-
-/**
- * @param {!ExecutionState} execState
- * @param {!BreakpointInfo} info
- * @return {string|undefined}
- */
-DebuggerScript.setBreakpoint = function(execState, info)
-{
- var breakId = Debug.setScriptBreakPointById(info.sourceID, info.lineNumber, info.columnNumber, info.condition, undefined, Debug.BreakPositionAlignment.Statement);
- var locations = Debug.findBreakPointActualLocations(breakId);
- if (!locations.length)
- return undefined;
- info.lineNumber = locations[0].line;
- info.columnNumber = locations[0].column;
- return breakId.toString();
-}
-
-/**
- * @param {!ExecutionState} execState
- * @param {!{breakpointId: number}} info
- */
-DebuggerScript.removeBreakpoint = function(execState, info)
-{
- Debug.findBreakPoint(info.breakpointId, true);
-}
-
-/**
- * @return {number}
- */
-DebuggerScript.pauseOnExceptionsState = function()
-{
- return DebuggerScript._pauseOnExceptionsState;
-}
-
-/**
- * @param {number} newState
- */
-DebuggerScript.setPauseOnExceptionsState = function(newState)
-{
- DebuggerScript._pauseOnExceptionsState = newState;
-
- if (DebuggerScript.PauseOnExceptionsState.PauseOnAllExceptions === newState)
- Debug.setBreakOnException();
- else
- Debug.clearBreakOnException();
-
- if (DebuggerScript.PauseOnExceptionsState.PauseOnUncaughtExceptions === newState)
- Debug.setBreakOnUncaughtException();
- else
- Debug.clearBreakOnUncaughtException();
-}
-
-/**
- * @param {!ExecutionState} execState
- * @param {number} limit
- * @return {!Array<!JavaScriptCallFrame>}
- */
-DebuggerScript.currentCallFrames = function(execState, limit)
-{
- var frames = [];
- for (var i = 0; i < execState.frameCount() && (!limit || i < limit); ++i)
- frames.push(DebuggerScript._frameMirrorToJSCallFrame(execState.frame(i)));
- return frames;
-}
-
-/**
- * @param {!ExecutionState} execState
- */
-DebuggerScript.stepIntoStatement = function(execState)
-{
- execState.prepareStep(Debug.StepAction.StepIn);
-}
-
-/**
- * @param {!ExecutionState} execState
- */
-DebuggerScript.stepFrameStatement = function(execState)
-{
- execState.prepareStep(Debug.StepAction.StepFrame);
-}
-
-/**
- * @param {!ExecutionState} execState
- */
-DebuggerScript.stepOverStatement = function(execState)
-{
- execState.prepareStep(Debug.StepAction.StepNext);
-}
-
-/**
- * @param {!ExecutionState} execState
- */
-DebuggerScript.stepOutOfFunction = function(execState)
-{
- execState.prepareStep(Debug.StepAction.StepOut);
-}
-
-DebuggerScript.clearStepping = function()
-{
- Debug.clearStepping();
-}
-
-// Returns array in form:
-// [ 0, <v8_result_report> ] in case of success
-// or [ 1, <general_error_message>, <compiler_message>, <line_number>, <column_number> ] in case of compile error, numbers are 1-based.
-// or throws exception with message.
-/**
- * @param {number} scriptId
- * @param {string} newSource
- * @param {boolean} preview
- * @return {!Array<*>}
- */
-DebuggerScript.liveEditScriptSource = function(scriptId, newSource, preview)
-{
- var scripts = Debug.scripts();
- var scriptToEdit = null;
- for (var i = 0; i < scripts.length; i++) {
- if (scripts[i].id == scriptId) {
- scriptToEdit = scripts[i];
- break;
- }
- }
- if (!scriptToEdit)
- throw("Script not found");
-
- var changeLog = [];
- try {
- var result = Debug.LiveEdit.SetScriptSource(scriptToEdit, newSource, preview, changeLog);
- return [0, result.stack_modified];
- } catch (e) {
- if (e instanceof Debug.LiveEdit.Failure && "details" in e) {
- var details = /** @type {!LiveEditErrorDetails} */(e.details);
- if (details.type === "liveedit_compile_error") {
- var startPosition = details.position.start;
- return [1, String(e), String(details.syntaxErrorMessage), Number(startPosition.line), Number(startPosition.column)];
- }
- }
- throw e;
- }
-}
-
-/**
- * @param {!ExecutionState} execState
- */
-DebuggerScript.clearBreakpoints = function(execState)
-{
- Debug.clearAllBreakPoints();
-}
-
-/**
- * @param {!ExecutionState} execState
- * @param {!{enabled: boolean}} info
- */
-DebuggerScript.setBreakpointsActivated = function(execState, info)
-{
- Debug.debuggerFlags().breakPointsActive.setValue(info.enabled);
-}
-
-/**
- * @param {!BreakEvent} eventData
- */
-DebuggerScript.getBreakpointNumbers = function(eventData)
-{
- var breakpoints = eventData.breakPointsHit();
- var numbers = [];
- if (!breakpoints)
- return numbers;
-
- for (var i = 0; i < breakpoints.length; i++) {
- var breakpoint = breakpoints[i];
- var scriptBreakPoint = breakpoint.script_break_point();
- numbers.push(scriptBreakPoint ? scriptBreakPoint.number() : breakpoint.number());
- }
- return numbers;
-}
-
-// NOTE: This function is performance critical, as it can be run on every
-// statement that generates an async event (like addEventListener) to support
-// asynchronous call stacks. Thus, when possible, initialize the data lazily.
-/**
- * @param {!FrameMirror} frameMirror
- * @return {!JavaScriptCallFrame}
- */
-DebuggerScript._frameMirrorToJSCallFrame = function(frameMirror)
-{
- // Stuff that can not be initialized lazily (i.e. valid while paused with a valid break_id).
- // The frameMirror and scopeMirror can be accessed only while paused on the debugger.
- var frameDetails = frameMirror.details();
-
- var funcObject = frameDetails.func();
- var sourcePosition = frameDetails.sourcePosition();
- var thisObject = frameDetails.receiver();
-
- var isAtReturn = !!frameDetails.isAtReturn();
- var returnValue = isAtReturn ? frameDetails.returnValue() : undefined;
-
- var scopeMirrors = frameMirror.allScopes(false);
- /** @type {!Array<ScopeType>} */
- var scopeTypes = new Array(scopeMirrors.length);
- /** @type {?Array<!Object>} */
- var scopeObjects = new Array(scopeMirrors.length);
- /** @type {!Array<string|undefined>} */
- var scopeNames = new Array(scopeMirrors.length);
- /** @type {?Array<number>} */
- var scopeStartPositions = new Array(scopeMirrors.length);
- /** @type {?Array<number>} */
- var scopeEndPositions = new Array(scopeMirrors.length);
- /** @type {?Array<function()|null>} */
- var scopeFunctions = new Array(scopeMirrors.length);
- for (var i = 0; i < scopeMirrors.length; ++i) {
- var scopeDetails = scopeMirrors[i].details();
- scopeTypes[i] = scopeDetails.type();
- scopeObjects[i] = scopeDetails.object();
- scopeNames[i] = scopeDetails.name();
- scopeStartPositions[i] = scopeDetails.startPosition ? scopeDetails.startPosition() : 0;
- scopeEndPositions[i] = scopeDetails.endPosition ? scopeDetails.endPosition() : 0;
- scopeFunctions[i] = scopeDetails.func ? scopeDetails.func() : null;
- }
-
- // Calculated lazily.
- var scopeChain;
- var funcMirror;
- var location;
- /** @type {!Array<?RawLocation>} */
- var scopeStartLocations;
- /** @type {!Array<?RawLocation>} */
- var scopeEndLocations;
- var details;
-
- /**
- * @param {!ScriptMirror|undefined} script
- * @param {number} pos
- * @return {?RawLocation}
- */
- function createLocation(script, pos)
- {
- if (!script)
- return null;
-
- var location = script.locationFromPosition(pos, true);
- return {
- "lineNumber": location.line,
- "columnNumber": location.column,
- "scriptId": String(script.id())
- }
- }
-
- /**
- * @return {!Array<!Object>}
- */
- function ensureScopeChain()
- {
- if (!scopeChain) {
- scopeChain = [];
- scopeStartLocations = [];
- scopeEndLocations = [];
- for (var i = 0, j = 0; i < scopeObjects.length; ++i) {
- var scopeObject = DebuggerScript._buildScopeObject(scopeTypes[i], scopeObjects[i]);
- if (scopeObject) {
- scopeTypes[j] = scopeTypes[i];
- scopeNames[j] = scopeNames[i];
- scopeChain[j] = scopeObject;
-
- var funcMirror = scopeFunctions ? MakeMirror(scopeFunctions[i]) : null;
- if (!funcMirror || !funcMirror.isFunction())
- funcMirror = new UnresolvedFunctionMirror(funcObject);
-
- var script = /** @type {!FunctionMirror} */(funcMirror).script();
- scopeStartLocations[j] = createLocation(script, scopeStartPositions[i]);
- scopeEndLocations[j] = createLocation(script, scopeEndPositions[i]);
- ++j;
- }
- }
- scopeTypes.length = scopeChain.length;
- scopeNames.length = scopeChain.length;
- scopeObjects = null; // Free for GC.
- scopeFunctions = null;
- scopeStartPositions = null;
- scopeEndPositions = null;
- }
- return scopeChain;
- }
-
- /**
- * @return {!JavaScriptCallFrameDetails}
- */
- function lazyDetails()
- {
- if (!details) {
- var scopeObjects = ensureScopeChain();
- var script = ensureFuncMirror().script();
- /** @type {!Array<Scope>} */
- var scopes = [];
- for (var i = 0; i < scopeObjects.length; ++i) {
- var scope = {
- "type": /** @type {string} */(DebuggerScript._scopeTypeNames.get(scopeTypes[i])),
- "object": scopeObjects[i],
- };
- if (scopeNames[i])
- scope.name = scopeNames[i];
- if (scopeStartLocations[i])
- scope.startLocation = /** @type {!RawLocation} */(scopeStartLocations[i]);
- if (scopeEndLocations[i])
- scope.endLocation = /** @type {!RawLocation} */(scopeEndLocations[i]);
- scopes.push(scope);
- }
- details = {
- "functionName": ensureFuncMirror().debugName(),
- "location": {
- "lineNumber": line(),
- "columnNumber": column(),
- "scriptId": String(script.id())
- },
- "this": thisObject,
- "scopeChain": scopes
- };
- var functionLocation = ensureFuncMirror().sourceLocation();
- if (functionLocation) {
- details.functionLocation = {
- "lineNumber": functionLocation.line,
- "columnNumber": functionLocation.column,
- "scriptId": String(script.id())
- };
- }
- if (isAtReturn)
- details.returnValue = returnValue;
- }
- return details;
- }
-
- /**
- * @return {!FunctionMirror}
- */
- function ensureFuncMirror()
- {
- if (!funcMirror) {
- funcMirror = MakeMirror(funcObject);
- if (!funcMirror.isFunction())
- funcMirror = new UnresolvedFunctionMirror(funcObject);
- }
- return /** @type {!FunctionMirror} */(funcMirror);
- }
-
- /**
- * @return {!{line: number, column: number}}
- */
- function ensureLocation()
- {
- if (!location) {
- var script = ensureFuncMirror().script();
- if (script)
- location = script.locationFromPosition(sourcePosition, true);
- if (!location)
- location = { line: 0, column: 0 };
- }
- return location;
- }
-
- /**
- * @return {number}
- */
- function line()
- {
- return ensureLocation().line;
- }
-
- /**
- * @return {number}
- */
- function column()
- {
- return ensureLocation().column;
- }
-
- /**
- * @return {number}
- */
- function contextId()
- {
- var mirror = ensureFuncMirror();
- // Old V8 do not have context() function on these objects
- if (!mirror.context)
- return DebuggerScript._executionContextId(mirror.script().value().context_data);
- var context = mirror.context();
- if (context)
- return DebuggerScript._executionContextId(context.data());
- return 0;
- }
-
- /**
- * @return {number|undefined}
- */
- function sourceID()
- {
- var script = ensureFuncMirror().script();
- return script && script.id();
- }
-
- /**
- * @param {string} expression
- * @return {*}
- */
- function evaluate(expression)
- {
- return frameMirror.evaluate(expression, false).value();
- }
-
- /** @return {undefined} */
- function restart()
- {
- return frameMirror.restart();
- }
-
- /**
- * @param {number} scopeNumber
- * @param {string} variableName
- * @param {*} newValue
- */
- function setVariableValue(scopeNumber, variableName, newValue)
- {
- var scopeMirror = frameMirror.scope(scopeNumber);
- if (!scopeMirror)
- throw new Error("Incorrect scope index");
- scopeMirror.setVariableValue(variableName, newValue);
- }
-
- return {
- "sourceID": sourceID,
- "line": line,
- "column": column,
- "contextId": contextId,
- "thisObject": thisObject,
- "evaluate": evaluate,
- "restart": restart,
- "setVariableValue": setVariableValue,
- "isAtReturn": isAtReturn,
- "details": lazyDetails
- };
-}
-
-/**
- * @param {number} scopeType
- * @param {!Object} scopeObject
- * @return {!Object|undefined}
- */
-DebuggerScript._buildScopeObject = function(scopeType, scopeObject)
-{
- var result;
- switch (scopeType) {
- case ScopeType.Local:
- case ScopeType.Closure:
- case ScopeType.Catch:
- case ScopeType.Block:
- case ScopeType.Script:
- // For transient objects we create a "persistent" copy that contains
- // the same properties.
- // Reset scope object prototype to null so that the proto properties
- // don't appear in the local scope section.
- var properties = /** @type {!ObjectMirror} */(MakeMirror(scopeObject, true /* transient */)).properties();
- // Almost always Script scope will be empty, so just filter out that noise.
- // Also drop empty Block scopes, should we get any.
- if (!properties.length && (scopeType === ScopeType.Script || scopeType === ScopeType.Block))
- break;
- result = { __proto__: null };
- for (var j = 0; j < properties.length; j++) {
- var name = properties[j].name();
- if (name.length === 0 || name.charAt(0) === ".")
- continue; // Skip internal variables like ".arguments" and variables with empty name
- result[name] = properties[j].value_;
- }
- break;
- case ScopeType.Global:
- case ScopeType.With:
- result = scopeObject;
- break;
- }
- return result;
-}
-
-// We never resolve Mirror by its handle so to avoid memory leaks caused by Mirrors in the cache we disable it.
-ToggleMirrorCache(false);
-
-return DebuggerScript;
-})();

Powered by Google App Engine
This is Rietveld 408576698