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

Unified Diff: third_party/WebKit/Source/devtools/front_end/sdk/RemoteObject.js

Issue 2466123002: DevTools: reformat front-end code to match chromium style. (Closed)
Patch Set: all done Created 4 years, 1 month 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/devtools/front_end/sdk/RemoteObject.js
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/RemoteObject.js b/third_party/WebKit/Source/devtools/front_end/sdk/RemoteObject.js
index 6df769690fa7214f90727dc1389a54837438d0a7..e62919f1c6a2b6f799b278fd0704942b4d3c8909 100644
--- a/third_party/WebKit/Source/devtools/front_end/sdk/RemoteObject.js
+++ b/third_party/WebKit/Source/devtools/front_end/sdk/RemoteObject.js
@@ -27,358 +27,382 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
- /**
+/**
* @typedef {{object: ?WebInspector.RemoteObject, wasThrown: (boolean|undefined)}}
*/
WebInspector.CallFunctionResult;
/**
- * This may not be an interface due to "instanceof WebInspector.RemoteObject" checks in the code.
- *
- * @constructor
+ * @unrestricted
*/
-WebInspector.RemoteObject = function() { };
-
-WebInspector.RemoteObject.prototype = {
-
- /**
- * @return {?RuntimeAgent.CustomPreview}
- */
- customPreview: function()
- {
- return null;
- },
-
- /** @return {string} */
- get type()
- {
- throw "Not implemented";
- },
-
- /** @return {string|undefined} */
- get subtype()
- {
- throw "Not implemented";
- },
-
- /** @return {string|undefined} */
- get description()
- {
- throw "Not implemented";
- },
-
- /** @return {boolean} */
- get hasChildren()
- {
- throw "Not implemented";
- },
+WebInspector.RemoteObject = class {
+ /**
+ * This may not be an interface due to "instanceof WebInspector.RemoteObject" checks in the code.
+ */
+
+ /**
+ * @param {*} value
+ * @return {!WebInspector.RemoteObject}
+ */
+ static fromLocalObject(value) {
+ return new WebInspector.LocalJSONObject(value);
+ }
- /**
- * @return {number}
- */
- arrayLength: function()
- {
- throw "Not implemented";
- },
+ /**
+ * @param {!WebInspector.RemoteObject} remoteObject
+ * @return {string}
+ */
+ static type(remoteObject) {
+ if (remoteObject === null)
+ return 'null';
- /**
- * @param {function(?Array.<!WebInspector.RemoteObjectProperty>, ?Array.<!WebInspector.RemoteObjectProperty>)} callback
- */
- getOwnProperties: function(callback)
- {
- throw "Not implemented";
- },
+ var type = typeof remoteObject;
+ if (type !== 'object' && type !== 'function')
+ return type;
- /**
- * @return {!Promise<!{properties: ?Array.<!WebInspector.RemoteObjectProperty>, internalProperties: ?Array.<!WebInspector.RemoteObjectProperty>}>}
- */
- getOwnPropertiesPromise: function()
- {
- return new Promise(promiseConstructor.bind(this));
-
- /**
- * @param {function(!{properties: ?Array.<!WebInspector.RemoteObjectProperty>, internalProperties: ?Array.<!WebInspector.RemoteObjectProperty>})} success
- * @this {WebInspector.RemoteObject}
- */
- function promiseConstructor(success)
- {
- this.getOwnProperties(getOwnPropertiesCallback.bind(null, success));
- }
+ return remoteObject.type;
+ }
+
+ /**
+ * @param {!WebInspector.RemoteObject|!RuntimeAgent.RemoteObject|!RuntimeAgent.ObjectPreview} object
+ * @return {number}
+ */
+ static arrayLength(object) {
+ if (object.subtype !== 'array' && object.subtype !== 'typedarray')
+ return 0;
+ var matches = object.description.match(/\[([0-9]+)\]/);
+ if (!matches)
+ return 0;
+ return parseInt(matches[1], 10);
+ }
- /**
- * @param {function(!{properties: ?Array.<!WebInspector.RemoteObjectProperty>, internalProperties: ?Array.<!WebInspector.RemoteObjectProperty>})} callback
- * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties
- * @param {?Array.<!WebInspector.RemoteObjectProperty>} internalProperties
- */
- function getOwnPropertiesCallback(callback, properties, internalProperties)
- {
- callback({
- properties: properties,
- internalProperties: internalProperties
- });
- }
- },
+ /**
+ * @param {!RuntimeAgent.RemoteObject|!WebInspector.RemoteObject|number|string|boolean|undefined|null} object
+ * @return {!RuntimeAgent.CallArgument}
+ */
+ static toCallArgument(object) {
+ var type = typeof object;
+ if (type === 'undefined')
+ return {};
+ if (type === 'number') {
+ var description = String(object);
+ if (object === 0 && 1 / object < 0)
+ return {unserializableValue: RuntimeAgent.UnserializableValue.Negative0};
+ if (description === 'NaN')
+ return {unserializableValue: RuntimeAgent.UnserializableValue.NaN};
+ if (description === 'Infinity')
+ return {unserializableValue: RuntimeAgent.UnserializableValue.Infinity};
+ if (description === '-Infinity')
+ return {unserializableValue: RuntimeAgent.UnserializableValue.NegativeInfinity};
+ return {value: object};
+ }
+ if (type === 'string' || type === 'boolean')
+ return {value: object};
- /**
- * @param {boolean} accessorPropertiesOnly
- * @param {function(?Array<!WebInspector.RemoteObjectProperty>, ?Array<!WebInspector.RemoteObjectProperty>)} callback
- */
- getAllProperties: function(accessorPropertiesOnly, callback)
- {
- throw "Not implemented";
- },
+ if (!object)
+ return {value: null};
+
+ if (typeof object.unserializableValue !== 'undefined')
+ return {unserializableValue: object.unserializableValue};
+ if (typeof object._unserializableValue !== 'undefined')
+ return {unserializableValue: object._unserializableValue};
+
+ if (typeof object.objectId !== 'undefined')
+ return {objectId: object.objectId};
+ if (typeof object._objectId !== 'undefined')
+ return {objectId: object._objectId};
+
+ return {value: object.value};
+ }
+
+ /**
+ * @param {!WebInspector.RemoteObject} object
+ * @param {function(?Array.<!WebInspector.RemoteObjectProperty>, ?Array.<!WebInspector.RemoteObjectProperty>)} callback
+ */
+ static loadFromObjectPerProto(object, callback) {
+ // Combines 2 asynch calls. Doesn't rely on call-back orders (some calls may be loop-back).
+ var savedOwnProperties;
+ var savedAccessorProperties;
+ var savedInternalProperties;
+ var resultCounter = 2;
- /**
- * @param {boolean} accessorPropertiesOnly
- * @return {!Promise<!{properties: ?Array<!WebInspector.RemoteObjectProperty>, internalProperties: ?Array<!WebInspector.RemoteObjectProperty>}>}
- */
- getAllPropertiesPromise: function(accessorPropertiesOnly)
- {
- return new Promise(promiseConstructor.bind(this));
-
- /**
- * @param {function(!{properties: ?Array<!WebInspector.RemoteObjectProperty>, internalProperties: ?Array.<!WebInspector.RemoteObjectProperty>})} success
- * @this {WebInspector.RemoteObject}
- */
- function promiseConstructor(success)
- {
- this.getAllProperties(accessorPropertiesOnly, getAllPropertiesCallback.bind(null, success));
+ function processCallback() {
+ if (--resultCounter)
+ return;
+ if (savedOwnProperties && savedAccessorProperties) {
+ var propertiesMap = new Map();
+ var propertySymbols = [];
+ for (var i = 0; i < savedAccessorProperties.length; i++) {
+ var property = savedAccessorProperties[i];
+ if (property.symbol)
+ propertySymbols.push(property);
+ else
+ propertiesMap.set(property.name, property);
}
-
- /**
- * @param {function(!{properties: ?Array<!WebInspector.RemoteObjectProperty>, internalProperties: ?Array<!WebInspector.RemoteObjectProperty>})} callback
- * @param {?Array<!WebInspector.RemoteObjectProperty>} properties
- * @param {?Array<!WebInspector.RemoteObjectProperty>} internalProperties
- */
- function getAllPropertiesCallback(callback, properties, internalProperties)
- {
- callback({
- properties: properties,
- internalProperties: internalProperties
- });
+ for (var i = 0; i < savedOwnProperties.length; i++) {
+ var property = savedOwnProperties[i];
+ if (property.isAccessorProperty())
+ continue;
+ if (property.symbol)
+ propertySymbols.push(property);
+ else
+ propertiesMap.set(property.name, property);
}
- },
+ return callback(
+ propertiesMap.valuesArray().concat(propertySymbols),
+ savedInternalProperties ? savedInternalProperties : null);
+ } else {
+ callback(null, null);
+ }
+ }
/**
- * @return {!Promise<?Array<!WebInspector.EventListener>>}
+ * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties
+ * @param {?Array.<!WebInspector.RemoteObjectProperty>} internalProperties
*/
- eventListeners: function()
- {
- throw "Not implemented";
- },
+ function allAccessorPropertiesCallback(properties, internalProperties) {
+ savedAccessorProperties = properties;
+ processCallback();
+ }
/**
- * @param {!RuntimeAgent.CallArgument} name
- * @param {function(string=)} callback
+ * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties
+ * @param {?Array.<!WebInspector.RemoteObjectProperty>} internalProperties
*/
- deleteProperty: function(name, callback)
- {
- throw "Not implemented";
- },
+ function ownPropertiesCallback(properties, internalProperties) {
+ savedOwnProperties = properties;
+ savedInternalProperties = internalProperties;
+ processCallback();
+ }
- /**
- * @param {string|!RuntimeAgent.CallArgument} name
- * @param {string} value
- * @param {function(string=)} callback
- */
- setPropertyValue: function(name, value, callback)
- {
- throw "Not implemented";
- },
+ object.getAllProperties(true, allAccessorPropertiesCallback);
+ object.getOwnProperties(ownPropertiesCallback);
+ }
+
+ /**
+ * @return {?RuntimeAgent.CustomPreview}
+ */
+ customPreview() {
+ return null;
+ }
+
+ /** @return {string} */
+ get type() {
+ throw 'Not implemented';
+ }
+
+ /** @return {string|undefined} */
+ get subtype() {
+ throw 'Not implemented';
+ }
+
+ /** @return {string|undefined} */
+ get description() {
+ throw 'Not implemented';
+ }
+
+ /** @return {boolean} */
+ get hasChildren() {
+ throw 'Not implemented';
+ }
+
+ /**
+ * @return {number}
+ */
+ arrayLength() {
+ throw 'Not implemented';
+ }
+
+ /**
+ * @param {function(?Array.<!WebInspector.RemoteObjectProperty>, ?Array.<!WebInspector.RemoteObjectProperty>)} callback
+ */
+ getOwnProperties(callback) {
+ throw 'Not implemented';
+ }
+
+ /**
+ * @return {!Promise<!{properties: ?Array.<!WebInspector.RemoteObjectProperty>, internalProperties: ?Array.<!WebInspector.RemoteObjectProperty>}>}
+ */
+ getOwnPropertiesPromise() {
+ return new Promise(promiseConstructor.bind(this));
/**
- * @param {function(this:Object, ...)} functionDeclaration
- * @param {!Array<!RuntimeAgent.CallArgument>=} args
- * @param {function(?WebInspector.RemoteObject, boolean=)=} callback
+ * @param {function(!{properties: ?Array.<!WebInspector.RemoteObjectProperty>, internalProperties: ?Array.<!WebInspector.RemoteObjectProperty>})} success
+ * @this {WebInspector.RemoteObject}
*/
- callFunction: function(functionDeclaration, args, callback)
- {
- throw "Not implemented";
- },
+ function promiseConstructor(success) {
+ this.getOwnProperties(getOwnPropertiesCallback.bind(null, success));
+ }
/**
- * @param {function(this:Object, ...)} functionDeclaration
- * @param {!Array<!RuntimeAgent.CallArgument>=} args
- * @return {!Promise<!WebInspector.CallFunctionResult>}
+ * @param {function(!{properties: ?Array.<!WebInspector.RemoteObjectProperty>, internalProperties: ?Array.<!WebInspector.RemoteObjectProperty>})} callback
+ * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties
+ * @param {?Array.<!WebInspector.RemoteObjectProperty>} internalProperties
*/
- callFunctionPromise: function(functionDeclaration, args)
- {
- return new Promise(promiseConstructor.bind(this));
-
- /**
- * @param {function(!WebInspector.CallFunctionResult)} success
- * @this {WebInspector.RemoteObject}
- */
- function promiseConstructor(success)
- {
- this.callFunction(functionDeclaration, args, callFunctionCallback.bind(null, success));
- }
-
- /**
- * @param {function(!WebInspector.CallFunctionResult)} callback
- * @param {?WebInspector.RemoteObject} object
- * @param {boolean=} wasThrown
- */
- function callFunctionCallback(callback, object, wasThrown)
- {
- callback({
- object: object,
- wasThrown: wasThrown
- });
- }
- },
+ function getOwnPropertiesCallback(callback, properties, internalProperties) {
+ callback({properties: properties, internalProperties: internalProperties});
+ }
+ }
+
+ /**
+ * @param {boolean} accessorPropertiesOnly
+ * @param {function(?Array<!WebInspector.RemoteObjectProperty>, ?Array<!WebInspector.RemoteObjectProperty>)} callback
+ */
+ getAllProperties(accessorPropertiesOnly, callback) {
+ throw 'Not implemented';
+ }
+
+ /**
+ * @param {boolean} accessorPropertiesOnly
+ * @return {!Promise<!{properties: ?Array<!WebInspector.RemoteObjectProperty>, internalProperties: ?Array<!WebInspector.RemoteObjectProperty>}>}
+ */
+ getAllPropertiesPromise(accessorPropertiesOnly) {
+ return new Promise(promiseConstructor.bind(this));
/**
- * @template T
- * @param {function(this:Object, ...):T} functionDeclaration
- * @param {!Array<!RuntimeAgent.CallArgument>|undefined} args
- * @param {function(T)} callback
+ * @param {function(!{properties: ?Array<!WebInspector.RemoteObjectProperty>, internalProperties: ?Array.<!WebInspector.RemoteObjectProperty>})} success
+ * @this {WebInspector.RemoteObject}
*/
- callFunctionJSON: function(functionDeclaration, args, callback)
- {
- throw "Not implemented";
- },
+ function promiseConstructor(success) {
+ this.getAllProperties(accessorPropertiesOnly, getAllPropertiesCallback.bind(null, success));
+ }
/**
- * @param {function(this:Object, ...):T} functionDeclaration
- * @param {!Array<!RuntimeAgent.CallArgument>|undefined} args
- * @return {!Promise<T>}
- * @template T
+ * @param {function(!{properties: ?Array<!WebInspector.RemoteObjectProperty>, internalProperties: ?Array<!WebInspector.RemoteObjectProperty>})} callback
+ * @param {?Array<!WebInspector.RemoteObjectProperty>} properties
+ * @param {?Array<!WebInspector.RemoteObjectProperty>} internalProperties
*/
- callFunctionJSONPromise: function(functionDeclaration, args)
- {
- return new Promise(promiseConstructor.bind(this));
-
- /**
- * @this {WebInspector.RemoteObject}
- */
- function promiseConstructor(success)
- {
- this.callFunctionJSON(functionDeclaration, args, success);
- }
- },
+ function getAllPropertiesCallback(callback, properties, internalProperties) {
+ callback({properties: properties, internalProperties: internalProperties});
+ }
+ }
+
+ /**
+ * @return {!Promise<?Array<!WebInspector.EventListener>>}
+ */
+ eventListeners() {
+ throw 'Not implemented';
+ }
+
+ /**
+ * @param {!RuntimeAgent.CallArgument} name
+ * @param {function(string=)} callback
+ */
+ deleteProperty(name, callback) {
+ throw 'Not implemented';
+ }
+
+ /**
+ * @param {string|!RuntimeAgent.CallArgument} name
+ * @param {string} value
+ * @param {function(string=)} callback
+ */
+ setPropertyValue(name, value, callback) {
+ throw 'Not implemented';
+ }
+
+ /**
+ * @param {function(this:Object, ...)} functionDeclaration
+ * @param {!Array<!RuntimeAgent.CallArgument>=} args
+ * @param {function(?WebInspector.RemoteObject, boolean=)=} callback
+ */
+ callFunction(functionDeclaration, args, callback) {
+ throw 'Not implemented';
+ }
+
+ /**
+ * @param {function(this:Object, ...)} functionDeclaration
+ * @param {!Array<!RuntimeAgent.CallArgument>=} args
+ * @return {!Promise<!WebInspector.CallFunctionResult>}
+ */
+ callFunctionPromise(functionDeclaration, args) {
+ return new Promise(promiseConstructor.bind(this));
/**
- * @return {!WebInspector.Target}
+ * @param {function(!WebInspector.CallFunctionResult)} success
+ * @this {WebInspector.RemoteObject}
*/
- target: function()
- {
- throw new Error("Target-less object");
- },
+ function promiseConstructor(success) {
+ this.callFunction(functionDeclaration, args, callFunctionCallback.bind(null, success));
+ }
/**
- * @return {?WebInspector.DebuggerModel}
+ * @param {function(!WebInspector.CallFunctionResult)} callback
+ * @param {?WebInspector.RemoteObject} object
+ * @param {boolean=} wasThrown
*/
- debuggerModel: function()
- {
- throw new Error("DebuggerModel-less object");
- },
+ function callFunctionCallback(callback, object, wasThrown) {
+ callback({object: object, wasThrown: wasThrown});
+ }
+ }
+
+ /**
+ * @template T
+ * @param {function(this:Object, ...):T} functionDeclaration
+ * @param {!Array<!RuntimeAgent.CallArgument>|undefined} args
+ * @param {function(T)} callback
+ */
+ callFunctionJSON(functionDeclaration, args, callback) {
+ throw 'Not implemented';
+ }
+
+ /**
+ * @param {function(this:Object, ...):T} functionDeclaration
+ * @param {!Array<!RuntimeAgent.CallArgument>|undefined} args
+ * @return {!Promise<T>}
+ * @template T
+ */
+ callFunctionJSONPromise(functionDeclaration, args) {
+ return new Promise(promiseConstructor.bind(this));
/**
- * @return {boolean}
+ * @this {WebInspector.RemoteObject}
*/
- isNode: function()
- {
- return false;
+ function promiseConstructor(success) {
+ this.callFunctionJSON(functionDeclaration, args, success);
}
+ }
+
+ /**
+ * @return {!WebInspector.Target}
+ */
+ target() {
+ throw new Error('Target-less object');
+ }
+
+ /**
+ * @return {?WebInspector.DebuggerModel}
+ */
+ debuggerModel() {
+ throw new Error('DebuggerModel-less object');
+ }
+
+ /**
+ * @return {boolean}
+ */
+ isNode() {
+ return false;
+ }
};
-/**
- * @param {*} value
- * @return {!WebInspector.RemoteObject}
- */
-WebInspector.RemoteObject.fromLocalObject = function(value)
-{
- return new WebInspector.LocalJSONObject(value);
-};
/**
- * @param {!WebInspector.RemoteObject} remoteObject
- * @return {string}
+ * @unrestricted
*/
-WebInspector.RemoteObject.type = function(remoteObject)
-{
- if (remoteObject === null)
- return "null";
-
- var type = typeof remoteObject;
- if (type !== "object" && type !== "function")
- return type;
-
- return remoteObject.type;
-};
-
-/**
- * @param {!WebInspector.RemoteObject|!RuntimeAgent.RemoteObject|!RuntimeAgent.ObjectPreview} object
- * @return {number}
- */
-WebInspector.RemoteObject.arrayLength = function(object)
-{
- if (object.subtype !== "array" && object.subtype !== "typedarray")
- return 0;
- var matches = object.description.match(/\[([0-9]+)\]/);
- if (!matches)
- return 0;
- return parseInt(matches[1], 10);
-};
-
-/**
- * @param {!RuntimeAgent.RemoteObject|!WebInspector.RemoteObject|number|string|boolean|undefined|null} object
- * @return {!RuntimeAgent.CallArgument}
- */
-WebInspector.RemoteObject.toCallArgument = function(object)
-{
- var type = typeof object;
- if (type === "undefined")
- return {};
- if (type === "number") {
- var description = String(object);
- if (object === 0 && 1 / object < 0)
- return { unserializableValue: RuntimeAgent.UnserializableValue.Negative0 };
- if (description === "NaN")
- return { unserializableValue: RuntimeAgent.UnserializableValue.NaN };
- if (description === "Infinity")
- return { unserializableValue: RuntimeAgent.UnserializableValue.Infinity };
- if (description === "-Infinity")
- return { unserializableValue: RuntimeAgent.UnserializableValue.NegativeInfinity };
- return { value: object };
- }
- if (type === "string" || type === "boolean")
- return { value: object };
-
- if (!object)
- return { value: null };
-
- if (typeof object.unserializableValue !== "undefined")
- return { unserializableValue: object.unserializableValue };
- if (typeof object._unserializableValue !== "undefined")
- return { unserializableValue: object._unserializableValue };
-
- if (typeof object.objectId !== "undefined")
- return { objectId: object.objectId };
- if (typeof object._objectId !== "undefined")
- return { objectId: object._objectId };
-
- return { value: object.value };
-};
-
-/**
- * @constructor
- * @extends {WebInspector.RemoteObject}
- * @param {!WebInspector.Target} target
- * @param {string|undefined} objectId
- * @param {string} type
- * @param {string|undefined} subtype
- * @param {*} value
- * @param {!RuntimeAgent.UnserializableValue=} unserializableValue
- * @param {string=} description
- * @param {!RuntimeAgent.ObjectPreview=} preview
- * @param {!RuntimeAgent.CustomPreview=} customPreview
- */
-WebInspector.RemoteObjectImpl = function(target, objectId, type, subtype, value, unserializableValue, description, preview, customPreview)
-{
- WebInspector.RemoteObject.call(this);
+WebInspector.RemoteObjectImpl = class extends WebInspector.RemoteObject {
+ /**
+ * @param {!WebInspector.Target} target
+ * @param {string|undefined} objectId
+ * @param {string} type
+ * @param {string|undefined} subtype
+ * @param {*} value
+ * @param {!RuntimeAgent.UnserializableValue=} unserializableValue
+ * @param {string=} description
+ * @param {!RuntimeAgent.ObjectPreview=} preview
+ * @param {!RuntimeAgent.CustomPreview=} customPreview
+ */
+ constructor(target, objectId, type, subtype, value, unserializableValue, description, preview, customPreview) {
+ super();
this._target = target;
this._runtimeAgent = target.runtimeAgent();
@@ -387,669 +411,574 @@ WebInspector.RemoteObjectImpl = function(target, objectId, type, subtype, value,
this._type = type;
this._subtype = subtype;
if (objectId) {
- // handle
- this._objectId = objectId;
- this._description = description;
- this._hasChildren = (type !== "symbol");
- this._preview = preview;
+ // handle
+ this._objectId = objectId;
+ this._description = description;
+ this._hasChildren = (type !== 'symbol');
+ this._preview = preview;
} else {
- this._description = description;
- if (!this._description && (typeof value !== "object" || value === null))
- this._description = value + "";
- this._hasChildren = false;
- if (typeof unserializableValue !== "undefined") {
- this._unserializableValue = unserializableValue;
- if (unserializableValue === RuntimeAgent.UnserializableValue.Infinity ||
- unserializableValue === RuntimeAgent.UnserializableValue.NegativeInfinity ||
- unserializableValue === RuntimeAgent.UnserializableValue.Negative0 ||
- unserializableValue === RuntimeAgent.UnserializableValue.NaN) {
- this.value = Number(unserializableValue);
- } else {
- this.value = unserializableValue;
- }
+ this._description = description;
+ if (!this._description && (typeof value !== 'object' || value === null))
+ this._description = value + '';
+ this._hasChildren = false;
+ if (typeof unserializableValue !== 'undefined') {
+ this._unserializableValue = unserializableValue;
+ if (unserializableValue === RuntimeAgent.UnserializableValue.Infinity ||
+ unserializableValue === RuntimeAgent.UnserializableValue.NegativeInfinity ||
+ unserializableValue === RuntimeAgent.UnserializableValue.Negative0 ||
+ unserializableValue === RuntimeAgent.UnserializableValue.NaN) {
+ this.value = Number(unserializableValue);
} else {
- this.value = value;
+ this.value = unserializableValue;
}
+ } else {
+ this.value = value;
+ }
}
this._customPreview = customPreview || null;
-};
-
-WebInspector.RemoteObjectImpl.prototype = {
-
+ }
+
+ /**
+ * @override
+ * @return {?RuntimeAgent.CustomPreview}
+ */
+ customPreview() {
+ return this._customPreview;
+ }
+
+ /** @return {!RuntimeAgent.RemoteObjectId} */
+ get objectId() {
+ return this._objectId;
+ }
+
+ /**
+ * @override
+ * @return {string}
+ */
+ get type() {
+ return this._type;
+ }
+
+ /**
+ * @override
+ * @return {string|undefined}
+ */
+ get subtype() {
+ return this._subtype;
+ }
+
+ /**
+ * @override
+ * @return {string|undefined}
+ */
+ get description() {
+ return this._description;
+ }
+
+ /**
+ * @override
+ * @return {boolean}
+ */
+ get hasChildren() {
+ return this._hasChildren;
+ }
+
+ /**
+ * @return {!RuntimeAgent.ObjectPreview|undefined}
+ */
+ get preview() {
+ return this._preview;
+ }
+
+ /**
+ * @override
+ * @param {function(?Array.<!WebInspector.RemoteObjectProperty>, ?Array.<!WebInspector.RemoteObjectProperty>)} callback
+ */
+ getOwnProperties(callback) {
+ this.doGetProperties(true, false, false, callback);
+ }
+
+ /**
+ * @override
+ * @param {boolean} accessorPropertiesOnly
+ * @param {function(?Array.<!WebInspector.RemoteObjectProperty>, ?Array.<!WebInspector.RemoteObjectProperty>)} callback
+ */
+ getAllProperties(accessorPropertiesOnly, callback) {
+ this.doGetProperties(false, accessorPropertiesOnly, false, callback);
+ }
+
+ /**
+ * @override
+ * @return {!Promise<?Array<!WebInspector.EventListener>>}
+ */
+ eventListeners() {
+ return new Promise(eventListeners.bind(this));
/**
- * @override
- * @return {?RuntimeAgent.CustomPreview}
+ * @param {function(?)} fulfill
+ * @param {function(*)} reject
+ * @this {WebInspector.RemoteObjectImpl}
*/
- customPreview: function()
- {
- return this._customPreview;
- },
-
- /** @return {!RuntimeAgent.RemoteObjectId} */
- get objectId()
- {
- return this._objectId;
- },
-
- /**
- * @override
- * @return {string}
- */
- get type()
- {
- return this._type;
- },
-
- /**
- * @override
- * @return {string|undefined}
- */
- get subtype()
- {
- return this._subtype;
- },
-
- /**
- * @override
- * @return {string|undefined}
- */
- get description()
- {
- return this._description;
- },
-
- /**
- * @override
- * @return {boolean}
- */
- get hasChildren()
- {
- return this._hasChildren;
- },
-
- /**
- * @return {!RuntimeAgent.ObjectPreview|undefined}
- */
- get preview()
- {
- return this._preview;
- },
-
- /**
- * @override
- * @param {function(?Array.<!WebInspector.RemoteObjectProperty>, ?Array.<!WebInspector.RemoteObjectProperty>)} callback
- */
- getOwnProperties: function(callback)
- {
- this.doGetProperties(true, false, false, callback);
- },
-
- /**
- * @override
- * @param {boolean} accessorPropertiesOnly
- * @param {function(?Array.<!WebInspector.RemoteObjectProperty>, ?Array.<!WebInspector.RemoteObjectProperty>)} callback
- */
- getAllProperties: function(accessorPropertiesOnly, callback)
- {
- this.doGetProperties(false, accessorPropertiesOnly, false, callback);
- },
-
- /**
- * @override
- * @return {!Promise<?Array<!WebInspector.EventListener>>}
- */
- eventListeners: function()
- {
- return new Promise(eventListeners.bind(this));
- /**
- * @param {function(?)} fulfill
- * @param {function(*)} reject
- * @this {WebInspector.RemoteObjectImpl}
- */
- function eventListeners(fulfill, reject)
- {
- if (!this.target().hasDOMCapability()) {
- // TODO(kozyatinskiy): figure out how this should work for |window| when there is no DOMDebugger.
- fulfill([]);
- return;
- }
-
- if (!this._objectId) {
- reject(new Error("No object id specified"));
- return;
- }
-
- this.target().domdebuggerAgent().getEventListeners(this._objectId, mycallback.bind(this));
-
- /**
- * @this {WebInspector.RemoteObjectImpl}
- * @param {?Protocol.Error} error
- * @param {!Array<!DOMDebuggerAgent.EventListener>} payloads
- */
- function mycallback(error, payloads)
- {
- if (error) {
- reject(new Error(error));
- return;
- }
- fulfill(payloads.map(createEventListener.bind(this)));
- }
-
- /**
- * @this {WebInspector.RemoteObjectImpl}
- * @param {!DOMDebuggerAgent.EventListener} payload
- */
- function createEventListener(payload)
- {
- return new WebInspector.EventListener(this._target,
- this,
- payload.type,
- payload.useCapture,
- payload.passive,
- payload.handler ? this.target().runtimeModel.createRemoteObject(payload.handler) : null,
- payload.originalHandler ? this.target().runtimeModel.createRemoteObject(payload.originalHandler) : null,
- /** @type {!WebInspector.DebuggerModel.Location} */ (this._debuggerModel.createRawLocationByScriptId(payload.scriptId, payload.lineNumber, payload.columnNumber)),
- payload.removeFunction ? this.target().runtimeModel.createRemoteObject(payload.removeFunction) : null);
- }
+ function eventListeners(fulfill, reject) {
+ if (!this.target().hasDOMCapability()) {
+ // TODO(kozyatinskiy): figure out how this should work for |window| when there is no DOMDebugger.
+ fulfill([]);
+ return;
+ }
+
+ if (!this._objectId) {
+ reject(new Error('No object id specified'));
+ return;
+ }
+
+ this.target().domdebuggerAgent().getEventListeners(this._objectId, mycallback.bind(this));
+
+ /**
+ * @this {WebInspector.RemoteObjectImpl}
+ * @param {?Protocol.Error} error
+ * @param {!Array<!DOMDebuggerAgent.EventListener>} payloads
+ */
+ function mycallback(error, payloads) {
+ if (error) {
+ reject(new Error(error));
+ return;
}
- },
+ fulfill(payloads.map(createEventListener.bind(this)));
+ }
+
+ /**
+ * @this {WebInspector.RemoteObjectImpl}
+ * @param {!DOMDebuggerAgent.EventListener} payload
+ */
+ function createEventListener(payload) {
+ return new WebInspector.EventListener(
+ this._target, this, payload.type, payload.useCapture, payload.passive,
+ payload.handler ? this.target().runtimeModel.createRemoteObject(payload.handler) : null,
+ payload.originalHandler ? this.target().runtimeModel.createRemoteObject(payload.originalHandler) : null,
+ /** @type {!WebInspector.DebuggerModel.Location} */ (this._debuggerModel.createRawLocationByScriptId(
+ payload.scriptId, payload.lineNumber, payload.columnNumber)),
+ payload.removeFunction ? this.target().runtimeModel.createRemoteObject(payload.removeFunction) : null);
+ }
+ }
+ }
+ /**
+ * @param {!Array.<string>} propertyPath
+ * @param {function(?WebInspector.RemoteObject, boolean=)} callback
+ */
+ getProperty(propertyPath, callback) {
/**
- * @param {!Array.<string>} propertyPath
- * @param {function(?WebInspector.RemoteObject, boolean=)} callback
+ * @param {string} arrayStr
+ * @suppressReceiverCheck
+ * @this {Object}
*/
- getProperty: function(propertyPath, callback)
- {
- /**
- * @param {string} arrayStr
- * @suppressReceiverCheck
- * @this {Object}
- */
- function remoteFunction(arrayStr)
- {
- var result = this;
- var properties = JSON.parse(arrayStr);
- for (var i = 0, n = properties.length; i < n; ++i)
- result = result[properties[i]];
- return result;
- }
+ function remoteFunction(arrayStr) {
+ var result = this;
+ var properties = JSON.parse(arrayStr);
+ for (var i = 0, n = properties.length; i < n; ++i)
+ result = result[properties[i]];
+ return result;
+ }
- var args = [{ value: JSON.stringify(propertyPath) }];
- this.callFunction(remoteFunction, args, callback);
- },
+ var args = [{value: JSON.stringify(propertyPath)}];
+ this.callFunction(remoteFunction, args, callback);
+ }
+
+ /**
+ * @param {boolean} ownProperties
+ * @param {boolean} accessorPropertiesOnly
+ * @param {boolean} generatePreview
+ * @param {function(?Array.<!WebInspector.RemoteObjectProperty>, ?Array.<!WebInspector.RemoteObjectProperty>)} callback
+ */
+ doGetProperties(ownProperties, accessorPropertiesOnly, generatePreview, callback) {
+ if (!this._objectId) {
+ callback(null, null);
+ return;
+ }
/**
- * @param {boolean} ownProperties
- * @param {boolean} accessorPropertiesOnly
- * @param {boolean} generatePreview
- * @param {function(?Array.<!WebInspector.RemoteObjectProperty>, ?Array.<!WebInspector.RemoteObjectProperty>)} callback
+ * @param {?Protocol.Error} error
+ * @param {!Array.<!RuntimeAgent.PropertyDescriptor>} properties
+ * @param {!Array.<!RuntimeAgent.InternalPropertyDescriptor>=} internalProperties
+ * @param {?RuntimeAgent.ExceptionDetails=} exceptionDetails
+ * @this {WebInspector.RemoteObjectImpl}
*/
- doGetProperties: function(ownProperties, accessorPropertiesOnly, generatePreview, callback)
- {
- if (!this._objectId) {
- callback(null, null);
- return;
+ function remoteObjectBinder(error, properties, internalProperties, exceptionDetails) {
+ if (error) {
+ callback(null, null);
+ return;
+ }
+ if (exceptionDetails) {
+ this._target.consoleModel.addMessage(
+ WebInspector.ConsoleMessage.fromException(this._target, exceptionDetails, undefined, undefined, undefined));
+ callback(null, null);
+ return;
+ }
+ var result = [];
+ for (var i = 0; properties && i < properties.length; ++i) {
+ var property = properties[i];
+ var propertyValue = property.value ? this._target.runtimeModel.createRemoteObject(property.value) : null;
+ var propertySymbol = property.symbol ? this._target.runtimeModel.createRemoteObject(property.symbol) : null;
+ var remoteProperty = new WebInspector.RemoteObjectProperty(
+ property.name, propertyValue, !!property.enumerable, !!property.writable, !!property.isOwn,
+ !!property.wasThrown, propertySymbol);
+
+ if (typeof property.value === 'undefined') {
+ if (property.get && property.get.type !== 'undefined')
+ remoteProperty.getter = this._target.runtimeModel.createRemoteObject(property.get);
+ if (property.set && property.set.type !== 'undefined')
+ remoteProperty.setter = this._target.runtimeModel.createRemoteObject(property.set);
}
- /**
- * @param {?Protocol.Error} error
- * @param {!Array.<!RuntimeAgent.PropertyDescriptor>} properties
- * @param {!Array.<!RuntimeAgent.InternalPropertyDescriptor>=} internalProperties
- * @param {?RuntimeAgent.ExceptionDetails=} exceptionDetails
- * @this {WebInspector.RemoteObjectImpl}
- */
- function remoteObjectBinder(error, properties, internalProperties, exceptionDetails)
- {
- if (error) {
- callback(null, null);
- return;
- }
- if (exceptionDetails) {
- this._target.consoleModel.addMessage(WebInspector.ConsoleMessage.fromException(this._target, exceptionDetails, undefined, undefined, undefined));
- callback(null, null);
- return;
- }
- var result = [];
- for (var i = 0; properties && i < properties.length; ++i) {
- var property = properties[i];
- var propertyValue = property.value ? this._target.runtimeModel.createRemoteObject(property.value) : null;
- var propertySymbol = property.symbol ? this._target.runtimeModel.createRemoteObject(property.symbol) : null;
- var remoteProperty = new WebInspector.RemoteObjectProperty(property.name, propertyValue,
- !!property.enumerable, !!property.writable, !!property.isOwn, !!property.wasThrown, propertySymbol);
-
- if (typeof property.value === "undefined") {
- if (property.get && property.get.type !== "undefined")
- remoteProperty.getter = this._target.runtimeModel.createRemoteObject(property.get);
- if (property.set && property.set.type !== "undefined")
- remoteProperty.setter = this._target.runtimeModel.createRemoteObject(property.set);
- }
-
- result.push(remoteProperty);
- }
- var internalPropertiesResult = null;
- if (internalProperties) {
- internalPropertiesResult = [];
- for (var i = 0; i < internalProperties.length; i++) {
- var property = internalProperties[i];
- if (!property.value)
- continue;
- var propertyValue = this._target.runtimeModel.createRemoteObject(property.value);
- internalPropertiesResult.push(new WebInspector.RemoteObjectProperty(property.name, propertyValue, true, false));
- }
- }
- callback(result, internalPropertiesResult);
+ result.push(remoteProperty);
+ }
+ var internalPropertiesResult = null;
+ if (internalProperties) {
+ internalPropertiesResult = [];
+ for (var i = 0; i < internalProperties.length; i++) {
+ var property = internalProperties[i];
+ if (!property.value)
+ continue;
+ var propertyValue = this._target.runtimeModel.createRemoteObject(property.value);
+ internalPropertiesResult.push(
+ new WebInspector.RemoteObjectProperty(property.name, propertyValue, true, false));
}
- this._runtimeAgent.getProperties(this._objectId, ownProperties, accessorPropertiesOnly, generatePreview, remoteObjectBinder.bind(this));
- },
-
- /**
- * @override
- * @param {string|!RuntimeAgent.CallArgument} name
- * @param {string} value
- * @param {function(string=)} callback
- */
- setPropertyValue: function(name, value, callback)
- {
- if (!this._objectId) {
- callback("Can't set a property of non-object.");
- return;
- }
-
- this._runtimeAgent.invoke_evaluate({expression:value, silent:true}, evaluatedCallback.bind(this));
-
- /**
- * @param {?Protocol.Error} error
- * @param {!RuntimeAgent.RemoteObject} result
- * @param {!RuntimeAgent.ExceptionDetails=} exceptionDetails
- * @this {WebInspector.RemoteObject}
- */
- function evaluatedCallback(error, result, exceptionDetails)
- {
- if (error || !!exceptionDetails) {
- callback(error || (result.type !== "string" ? result.description : /** @type {string} */(result.value)));
- return;
- }
-
- if (typeof name === "string")
- name = WebInspector.RemoteObject.toCallArgument(name);
-
- this.doSetObjectPropertyValue(result, name, callback);
+ }
+ callback(result, internalPropertiesResult);
+ }
+ this._runtimeAgent.getProperties(
+ this._objectId, ownProperties, accessorPropertiesOnly, generatePreview, remoteObjectBinder.bind(this));
+ }
+
+ /**
+ * @override
+ * @param {string|!RuntimeAgent.CallArgument} name
+ * @param {string} value
+ * @param {function(string=)} callback
+ */
+ setPropertyValue(name, value, callback) {
+ if (!this._objectId) {
+ callback('Can\'t set a property of non-object.');
+ return;
+ }
- if (result.objectId)
- this._runtimeAgent.releaseObject(result.objectId);
- }
- },
+ this._runtimeAgent.invoke_evaluate({expression: value, silent: true}, evaluatedCallback.bind(this));
/**
+ * @param {?Protocol.Error} error
* @param {!RuntimeAgent.RemoteObject} result
- * @param {!RuntimeAgent.CallArgument} name
- * @param {function(string=)} callback
- */
- doSetObjectPropertyValue: function(result, name, callback)
- {
- // This assignment may be for a regular (data) property, and for an accessor property (with getter/setter).
- // Note the sensitive matter about accessor property: the property may be physically defined in some proto object,
- // but logically it is bound to the object in question. JavaScript passes this object to getters/setters, not the object
- // where property was defined; so do we.
- var setPropertyValueFunction = "function(a, b) { this[a] = b; }";
-
- var argv = [name, WebInspector.RemoteObject.toCallArgument(result)];
- this._runtimeAgent.callFunctionOn(this._objectId, setPropertyValueFunction, argv, true, undefined, undefined, undefined, undefined, propertySetCallback);
-
- /**
- * @param {?Protocol.Error} error
- * @param {!RuntimeAgent.RemoteObject} result
- * @param {!RuntimeAgent.ExceptionDetails=} exceptionDetails
- */
- function propertySetCallback(error, result, exceptionDetails)
- {
- if (error || !!exceptionDetails) {
- callback(error || result.description);
- return;
- }
- callback();
- }
- },
-
- /**
- * @override
- * @param {!RuntimeAgent.CallArgument} name
- * @param {function(string=)} callback
- */
- deleteProperty: function(name, callback)
- {
- if (!this._objectId) {
- callback("Can't delete a property of non-object.");
- return;
- }
-
- var deletePropertyFunction = "function(a) { delete this[a]; return !(a in this); }";
- this._runtimeAgent.callFunctionOn(this._objectId, deletePropertyFunction, [name], true, undefined, undefined, undefined, undefined, deletePropertyCallback);
-
- /**
- * @param {?Protocol.Error} error
- * @param {!RuntimeAgent.RemoteObject} result
- * @param {!RuntimeAgent.ExceptionDetails=} exceptionDetails
- */
- function deletePropertyCallback(error, result, exceptionDetails)
- {
- if (error || !!exceptionDetails) {
- callback(error || result.description);
- return;
- }
- if (!result.value)
- callback("Failed to delete property.");
- else
- callback();
- }
- },
-
- /**
- * @override
- * @param {function(this:Object, ...)} functionDeclaration
- * @param {!Array.<!RuntimeAgent.CallArgument>=} args
- * @param {function(?WebInspector.RemoteObject, boolean=)=} callback
- */
- callFunction: function(functionDeclaration, args, callback)
- {
- /**
- * @param {?Protocol.Error} error
- * @param {!RuntimeAgent.RemoteObject} result
- * @param {!RuntimeAgent.ExceptionDetails=} exceptionDetails
- * @this {WebInspector.RemoteObjectImpl}
- */
- function mycallback(error, result, exceptionDetails)
- {
- if (!callback)
- return;
- if (error)
- callback(null, false);
- else
- callback(this.target().runtimeModel.createRemoteObject(result), !!exceptionDetails);
- }
-
- this._runtimeAgent.callFunctionOn(this._objectId, functionDeclaration.toString(), args, true, undefined, undefined, undefined, undefined, mycallback.bind(this));
- },
-
- /**
- * @override
- * @param {function(this:Object)} functionDeclaration
- * @param {!Array.<!RuntimeAgent.CallArgument>|undefined} args
- * @param {function(*)} callback
+ * @param {!RuntimeAgent.ExceptionDetails=} exceptionDetails
+ * @this {WebInspector.RemoteObject}
*/
- callFunctionJSON: function(functionDeclaration, args, callback)
- {
- /**
- * @param {?Protocol.Error} error
- * @param {!RuntimeAgent.RemoteObject} result
- * @param {!RuntimeAgent.ExceptionDetails=} exceptionDetails
- */
- function mycallback(error, result, exceptionDetails)
- {
- callback((error || !!exceptionDetails) ? null : result.value);
- }
+ function evaluatedCallback(error, result, exceptionDetails) {
+ if (error || !!exceptionDetails) {
+ callback(error || (result.type !== 'string' ? result.description : /** @type {string} */ (result.value)));
+ return;
+ }
- this._runtimeAgent.callFunctionOn(this._objectId, functionDeclaration.toString(), args, true, true, false, undefined, undefined, mycallback);
- },
+ if (typeof name === 'string')
+ name = WebInspector.RemoteObject.toCallArgument(name);
- release: function()
- {
- if (!this._objectId)
- return;
- this._runtimeAgent.releaseObject(this._objectId);
- },
+ this.doSetObjectPropertyValue(result, name, callback);
- /**
- * @override
- * @return {number}
- */
- arrayLength: function()
- {
- return WebInspector.RemoteObject.arrayLength(this);
- },
+ if (result.objectId)
+ this._runtimeAgent.releaseObject(result.objectId);
+ }
+ }
+
+ /**
+ * @param {!RuntimeAgent.RemoteObject} result
+ * @param {!RuntimeAgent.CallArgument} name
+ * @param {function(string=)} callback
+ */
+ doSetObjectPropertyValue(result, name, callback) {
+ // This assignment may be for a regular (data) property, and for an accessor property (with getter/setter).
+ // Note the sensitive matter about accessor property: the property may be physically defined in some proto object,
+ // but logically it is bound to the object in question. JavaScript passes this object to getters/setters, not the object
+ // where property was defined; so do we.
+ var setPropertyValueFunction = 'function(a, b) { this[a] = b; }';
+
+ var argv = [name, WebInspector.RemoteObject.toCallArgument(result)];
+ this._runtimeAgent.callFunctionOn(
+ this._objectId, setPropertyValueFunction, argv, true, undefined, undefined, undefined, undefined,
+ propertySetCallback);
/**
- * @override
- * @return {!WebInspector.Target}
+ * @param {?Protocol.Error} error
+ * @param {!RuntimeAgent.RemoteObject} result
+ * @param {!RuntimeAgent.ExceptionDetails=} exceptionDetails
*/
- target: function()
- {
- return this._target;
- },
+ function propertySetCallback(error, result, exceptionDetails) {
+ if (error || !!exceptionDetails) {
+ callback(error || result.description);
+ return;
+ }
+ callback();
+ }
+ }
+
+ /**
+ * @override
+ * @param {!RuntimeAgent.CallArgument} name
+ * @param {function(string=)} callback
+ */
+ deleteProperty(name, callback) {
+ if (!this._objectId) {
+ callback('Can\'t delete a property of non-object.');
+ return;
+ }
- /**
- * @override
- * @return {?WebInspector.DebuggerModel}
- */
- debuggerModel: function()
- {
- return this._debuggerModel;
- },
+ var deletePropertyFunction = 'function(a) { delete this[a]; return !(a in this); }';
+ this._runtimeAgent.callFunctionOn(
+ this._objectId, deletePropertyFunction, [name], true, undefined, undefined, undefined, undefined,
+ deletePropertyCallback);
/**
- * @override
- * @return {boolean}
+ * @param {?Protocol.Error} error
+ * @param {!RuntimeAgent.RemoteObject} result
+ * @param {!RuntimeAgent.ExceptionDetails=} exceptionDetails
*/
- isNode: function()
- {
- return !!this._objectId && this.type === "object" && this.subtype === "node";
- },
-
- __proto__: WebInspector.RemoteObject.prototype
-};
-
-
-/**
- * @param {!WebInspector.RemoteObject} object
- * @param {function(?Array.<!WebInspector.RemoteObjectProperty>, ?Array.<!WebInspector.RemoteObjectProperty>)} callback
- */
-WebInspector.RemoteObject.loadFromObjectPerProto = function(object, callback)
-{
- // Combines 2 asynch calls. Doesn't rely on call-back orders (some calls may be loop-back).
- var savedOwnProperties;
- var savedAccessorProperties;
- var savedInternalProperties;
- var resultCounter = 2;
-
- function processCallback()
- {
- if (--resultCounter)
- return;
- if (savedOwnProperties && savedAccessorProperties) {
- var propertiesMap = new Map();
- var propertySymbols = [];
- for (var i = 0; i < savedAccessorProperties.length; i++) {
- var property = savedAccessorProperties[i];
- if (property.symbol)
- propertySymbols.push(property);
- else
- propertiesMap.set(property.name, property);
- }
- for (var i = 0; i < savedOwnProperties.length; i++) {
- var property = savedOwnProperties[i];
- if (property.isAccessorProperty())
- continue;
- if (property.symbol)
- propertySymbols.push(property);
- else
- propertiesMap.set(property.name, property);
- }
- return callback(propertiesMap.valuesArray().concat(propertySymbols), savedInternalProperties ? savedInternalProperties : null);
- } else {
- callback(null, null);
- }
+ function deletePropertyCallback(error, result, exceptionDetails) {
+ if (error || !!exceptionDetails) {
+ callback(error || result.description);
+ return;
+ }
+ if (!result.value)
+ callback('Failed to delete property.');
+ else
+ callback();
}
-
+ }
+
+ /**
+ * @override
+ * @param {function(this:Object, ...)} functionDeclaration
+ * @param {!Array.<!RuntimeAgent.CallArgument>=} args
+ * @param {function(?WebInspector.RemoteObject, boolean=)=} callback
+ */
+ callFunction(functionDeclaration, args, callback) {
/**
- * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties
- * @param {?Array.<!WebInspector.RemoteObjectProperty>} internalProperties
+ * @param {?Protocol.Error} error
+ * @param {!RuntimeAgent.RemoteObject} result
+ * @param {!RuntimeAgent.ExceptionDetails=} exceptionDetails
+ * @this {WebInspector.RemoteObjectImpl}
*/
- function allAccessorPropertiesCallback(properties, internalProperties)
- {
- savedAccessorProperties = properties;
- processCallback();
+ function mycallback(error, result, exceptionDetails) {
+ if (!callback)
+ return;
+ if (error)
+ callback(null, false);
+ else
+ callback(this.target().runtimeModel.createRemoteObject(result), !!exceptionDetails);
}
+ this._runtimeAgent.callFunctionOn(
+ this._objectId, functionDeclaration.toString(), args, true, undefined, undefined, undefined, undefined,
+ mycallback.bind(this));
+ }
+
+ /**
+ * @override
+ * @param {function(this:Object)} functionDeclaration
+ * @param {!Array.<!RuntimeAgent.CallArgument>|undefined} args
+ * @param {function(*)} callback
+ */
+ callFunctionJSON(functionDeclaration, args, callback) {
/**
- * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties
- * @param {?Array.<!WebInspector.RemoteObjectProperty>} internalProperties
+ * @param {?Protocol.Error} error
+ * @param {!RuntimeAgent.RemoteObject} result
+ * @param {!RuntimeAgent.ExceptionDetails=} exceptionDetails
*/
- function ownPropertiesCallback(properties, internalProperties)
- {
- savedOwnProperties = properties;
- savedInternalProperties = internalProperties;
- processCallback();
+ function mycallback(error, result, exceptionDetails) {
+ callback((error || !!exceptionDetails) ? null : result.value);
}
- object.getAllProperties(true, allAccessorPropertiesCallback);
- object.getOwnProperties(ownPropertiesCallback);
+ this._runtimeAgent.callFunctionOn(
+ this._objectId, functionDeclaration.toString(), args, true, true, false, undefined, undefined, mycallback);
+ }
+
+ release() {
+ if (!this._objectId)
+ return;
+ this._runtimeAgent.releaseObject(this._objectId);
+ }
+
+ /**
+ * @override
+ * @return {number}
+ */
+ arrayLength() {
+ return WebInspector.RemoteObject.arrayLength(this);
+ }
+
+ /**
+ * @override
+ * @return {!WebInspector.Target}
+ */
+ target() {
+ return this._target;
+ }
+
+ /**
+ * @override
+ * @return {?WebInspector.DebuggerModel}
+ */
+ debuggerModel() {
+ return this._debuggerModel;
+ }
+
+ /**
+ * @override
+ * @return {boolean}
+ */
+ isNode() {
+ return !!this._objectId && this.type === 'object' && this.subtype === 'node';
+ }
};
/**
- * @constructor
- * @extends {WebInspector.RemoteObjectImpl}
- * @param {!WebInspector.Target} target
- * @param {string|undefined} objectId
- * @param {!WebInspector.ScopeRef} scopeRef
- * @param {string} type
- * @param {string|undefined} subtype
- * @param {*} value
- * @param {!RuntimeAgent.UnserializableValue=} unserializableValue
- * @param {string=} description
- * @param {!RuntimeAgent.ObjectPreview=} preview
+ * @unrestricted
*/
-WebInspector.ScopeRemoteObject = function(target, objectId, scopeRef, type, subtype, value, unserializableValue, description, preview)
-{
- WebInspector.RemoteObjectImpl.call(this, target, objectId, type, subtype, value, unserializableValue, description, preview);
+WebInspector.ScopeRemoteObject = class extends WebInspector.RemoteObjectImpl {
+ /**
+ * @param {!WebInspector.Target} target
+ * @param {string|undefined} objectId
+ * @param {!WebInspector.ScopeRef} scopeRef
+ * @param {string} type
+ * @param {string|undefined} subtype
+ * @param {*} value
+ * @param {!RuntimeAgent.UnserializableValue=} unserializableValue
+ * @param {string=} description
+ * @param {!RuntimeAgent.ObjectPreview=} preview
+ */
+ constructor(target, objectId, scopeRef, type, subtype, value, unserializableValue, description, preview) {
+ super(target, objectId, type, subtype, value, unserializableValue, description, preview);
this._scopeRef = scopeRef;
this._savedScopeProperties = undefined;
-};
+ }
+
+ /**
+ * @override
+ * @param {boolean} ownProperties
+ * @param {boolean} accessorPropertiesOnly
+ * @param {boolean} generatePreview
+ * @param {function(?Array.<!WebInspector.RemoteObjectProperty>, ?Array.<!WebInspector.RemoteObjectProperty>)} callback
+ */
+ doGetProperties(ownProperties, accessorPropertiesOnly, generatePreview, callback) {
+ if (accessorPropertiesOnly) {
+ callback([], []);
+ return;
+ }
+
+ if (this._savedScopeProperties) {
+ // No need to reload scope variables, as the remote object never
+ // changes its properties. If variable is updated, the properties
+ // array is patched locally.
+ callback(this._savedScopeProperties.slice(), []);
+ return;
+ }
-WebInspector.ScopeRemoteObject.prototype = {
/**
- * @override
- * @param {boolean} ownProperties
- * @param {boolean} accessorPropertiesOnly
- * @param {boolean} generatePreview
- * @param {function(?Array.<!WebInspector.RemoteObjectProperty>, ?Array.<!WebInspector.RemoteObjectProperty>)} callback
+ * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties
+ * @param {?Array.<!WebInspector.RemoteObjectProperty>} internalProperties
+ * @this {WebInspector.ScopeRemoteObject}
*/
- doGetProperties: function(ownProperties, accessorPropertiesOnly, generatePreview, callback)
- {
- if (accessorPropertiesOnly) {
- callback([], []);
- return;
- }
-
- if (this._savedScopeProperties) {
- // No need to reload scope variables, as the remote object never
- // changes its properties. If variable is updated, the properties
- // array is patched locally.
- callback(this._savedScopeProperties.slice(), []);
- return;
+ function wrappedCallback(properties, internalProperties) {
+ if (this._scopeRef && Array.isArray(properties)) {
+ this._savedScopeProperties = properties.slice();
+ if (!this._scopeRef.callFrameId) {
+ for (var property of this._savedScopeProperties)
+ property.writable = false;
}
+ }
+ callback(properties, internalProperties);
+ }
- /**
- * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties
- * @param {?Array.<!WebInspector.RemoteObjectProperty>} internalProperties
- * @this {WebInspector.ScopeRemoteObject}
- */
- function wrappedCallback(properties, internalProperties)
- {
- if (this._scopeRef && Array.isArray(properties)) {
- this._savedScopeProperties = properties.slice();
- if (!this._scopeRef.callFrameId) {
- for (var property of this._savedScopeProperties)
- property.writable = false;
- }
- }
- callback(properties, internalProperties);
- }
+ // Scope objects always fetch preview.
+ generatePreview = true;
- // Scope objects always fetch preview.
- generatePreview = true;
+ super.doGetProperties(ownProperties, accessorPropertiesOnly, generatePreview, wrappedCallback.bind(this));
+ }
- WebInspector.RemoteObjectImpl.prototype.doGetProperties.call(this, ownProperties, accessorPropertiesOnly, generatePreview, wrappedCallback.bind(this));
- },
+ /**
+ * @override
+ * @param {!RuntimeAgent.RemoteObject} result
+ * @param {!RuntimeAgent.CallArgument} argumentName
+ * @param {function(string=)} callback
+ */
+ doSetObjectPropertyValue(result, argumentName, callback) {
+ var name = /** @type {string} */ (argumentName.value);
+ this._debuggerModel.setVariableValue(
+ this._scopeRef.number, name, WebInspector.RemoteObject.toCallArgument(result), this._scopeRef.callFrameId,
+ setVariableValueCallback.bind(this));
/**
- * @override
- * @param {!RuntimeAgent.RemoteObject} result
- * @param {!RuntimeAgent.CallArgument} argumentName
- * @param {function(string=)} callback
+ * @param {string=} error
+ * @this {WebInspector.ScopeRemoteObject}
*/
- doSetObjectPropertyValue: function(result, argumentName, callback)
- {
- var name = /** @type {string} */ (argumentName.value);
- this._debuggerModel.setVariableValue(this._scopeRef.number, name, WebInspector.RemoteObject.toCallArgument(result), this._scopeRef.callFrameId, setVariableValueCallback.bind(this));
-
- /**
- * @param {string=} error
- * @this {WebInspector.ScopeRemoteObject}
- */
- function setVariableValueCallback(error)
- {
- if (error) {
- callback(error);
- return;
- }
- if (this._savedScopeProperties) {
- for (var i = 0; i < this._savedScopeProperties.length; i++) {
- if (this._savedScopeProperties[i].name === name)
- this._savedScopeProperties[i].value = this._target.runtimeModel.createRemoteObject(result);
- }
- }
- callback();
+ function setVariableValueCallback(error) {
+ if (error) {
+ callback(error);
+ return;
+ }
+ if (this._savedScopeProperties) {
+ for (var i = 0; i < this._savedScopeProperties.length; i++) {
+ if (this._savedScopeProperties[i].name === name)
+ this._savedScopeProperties[i].value = this._target.runtimeModel.createRemoteObject(result);
}
- },
-
- __proto__: WebInspector.RemoteObjectImpl.prototype
+ }
+ callback();
+ }
+ }
};
/**
- * @constructor
- * @param {number} number
- * @param {string=} callFrameId
+ * @unrestricted
*/
-WebInspector.ScopeRef = function(number, callFrameId)
-{
+WebInspector.ScopeRef = class {
+ /**
+ * @param {number} number
+ * @param {string=} callFrameId
+ */
+ constructor(number, callFrameId) {
this.number = number;
this.callFrameId = callFrameId;
+ }
};
/**
- * @constructor
- * @param {string} name
- * @param {?WebInspector.RemoteObject} value
- * @param {boolean=} enumerable
- * @param {boolean=} writable
- * @param {boolean=} isOwn
- * @param {boolean=} wasThrown
- * @param {boolean=} synthetic
- * @param {?WebInspector.RemoteObject=} symbol
+ * @unrestricted
*/
-WebInspector.RemoteObjectProperty = function(name, value, enumerable, writable, isOwn, wasThrown, symbol, synthetic)
-{
+WebInspector.RemoteObjectProperty = class {
+ /**
+ * @param {string} name
+ * @param {?WebInspector.RemoteObject} value
+ * @param {boolean=} enumerable
+ * @param {boolean=} writable
+ * @param {boolean=} isOwn
+ * @param {boolean=} wasThrown
+ * @param {boolean=} synthetic
+ * @param {?WebInspector.RemoteObject=} symbol
+ */
+ constructor(name, value, enumerable, writable, isOwn, wasThrown, symbol, synthetic) {
this.name = name;
if (value !== null)
- this.value = value;
- this.enumerable = typeof enumerable !== "undefined" ? enumerable : true;
- this.writable = typeof writable !== "undefined" ? writable : true;
+ this.value = value;
+ this.enumerable = typeof enumerable !== 'undefined' ? enumerable : true;
+ this.writable = typeof writable !== 'undefined' ? writable : true;
this.isOwn = !!isOwn;
this.wasThrown = !!wasThrown;
if (symbol)
- this.symbol = symbol;
+ this.symbol = symbol;
this.synthetic = !!synthetic;
-};
-
-WebInspector.RemoteObjectProperty.prototype = {
- /**
- * @return {boolean}
- */
- isAccessorProperty: function()
- {
- return !!(this.getter || this.setter);
- }
+ }
+
+ /**
+ * @return {boolean}
+ */
+ isAccessorProperty() {
+ return !!(this.getter || this.setter);
+ }
};
// Below is a wrapper around a local object that implements the RemoteObject interface,
@@ -1059,461 +988,439 @@ WebInspector.RemoteObjectProperty.prototype = {
// or functions.
/**
- * @constructor
- * @extends {WebInspector.RemoteObject}
- * @param {*} value
+ * @unrestricted
*/
-WebInspector.LocalJSONObject = function(value)
-{
- WebInspector.RemoteObject.call(this);
+WebInspector.LocalJSONObject = class extends WebInspector.RemoteObject {
+ /**
+ * @param {*} value
+ */
+ constructor(value) {
+ super();
this._value = value;
-};
+ }
-WebInspector.LocalJSONObject.prototype = {
- /**
- * @override
- * @return {string}
- */
- get description()
- {
- if (this._cachedDescription)
- return this._cachedDescription;
-
- /**
- * @param {!WebInspector.RemoteObjectProperty} property
- * @return {string}
- * @this {WebInspector.LocalJSONObject}
- */
- function formatArrayItem(property)
- {
- return this._formatValue(property.value);
- }
-
- /**
- * @param {!WebInspector.RemoteObjectProperty} property
- * @return {string}
- * @this {WebInspector.LocalJSONObject}
- */
- function formatObjectItem(property)
- {
- var name = property.name;
- if (/^\s|\s$|^$|\n/.test(name))
- name = "\"" + name.replace(/\n/g, "\u21B5") + "\"";
- return name + ": " + this._formatValue(property.value);
- }
-
- if (this.type === "object") {
- switch (this.subtype) {
- case "array":
- this._cachedDescription = this._concatenate("[", "]", formatArrayItem.bind(this));
- break;
- case "date":
- this._cachedDescription = "" + this._value;
- break;
- case "null":
- this._cachedDescription = "null";
- break;
- default:
- this._cachedDescription = this._concatenate("{", "}", formatObjectItem.bind(this));
- }
- } else {
- this._cachedDescription = String(this._value);
- }
-
- return this._cachedDescription;
- },
+ /**
+ * @override
+ * @return {string}
+ */
+ get description() {
+ if (this._cachedDescription)
+ return this._cachedDescription;
/**
- * @param {?WebInspector.RemoteObject} value
+ * @param {!WebInspector.RemoteObjectProperty} property
* @return {string}
+ * @this {WebInspector.LocalJSONObject}
*/
- _formatValue: function(value)
- {
- if (!value)
- return "undefined";
- var description = value.description || "";
- if (value.type === "string")
- return "\"" + description.replace(/\n/g, "\u21B5") + "\"";
- return description;
- },
-
- /**
- * @param {string} prefix
- * @param {string} suffix
- * @param {function(!WebInspector.RemoteObjectProperty)} formatProperty
- * @return {string}
- */
- _concatenate: function(prefix, suffix, formatProperty)
- {
- var previewChars = 100;
-
- var buffer = prefix;
- var children = this._children();
- for (var i = 0; i < children.length; ++i) {
- var itemDescription = formatProperty(children[i]);
- if (buffer.length + itemDescription.length > previewChars) {
- buffer += ",\u2026";
- break;
- }
- if (i)
- buffer += ", ";
- buffer += itemDescription;
- }
- buffer += suffix;
- return buffer;
- },
+ function formatArrayItem(property) {
+ return this._formatValue(property.value);
+ }
/**
- * @override
+ * @param {!WebInspector.RemoteObjectProperty} property
* @return {string}
+ * @this {WebInspector.LocalJSONObject}
*/
- get type()
- {
- return typeof this._value;
- },
-
- /**
- * @override
- * @return {string|undefined}
- */
- get subtype()
- {
- if (this._value === null)
- return "null";
-
- if (Array.isArray(this._value))
- return "array";
-
- if (this._value instanceof Date)
- return "date";
-
- return undefined;
- },
-
- /**
- * @override
- * @return {boolean}
- */
- get hasChildren()
- {
- if ((typeof this._value !== "object") || (this._value === null))
- return false;
- return !!Object.keys(/** @type {!Object} */ (this._value)).length;
- },
-
- /**
- * @override
- * @param {function(?Array.<!WebInspector.RemoteObjectProperty>, ?Array.<!WebInspector.RemoteObjectProperty>)} callback
- */
- getOwnProperties: function(callback)
- {
- callback(this._children(), null);
- },
-
- /**
- * @override
- * @param {boolean} accessorPropertiesOnly
- * @param {function(?Array.<!WebInspector.RemoteObjectProperty>, ?Array.<!WebInspector.RemoteObjectProperty>)} callback
- */
- getAllProperties: function(accessorPropertiesOnly, callback)
- {
- if (accessorPropertiesOnly)
- callback([], null);
- else
- callback(this._children(), null);
- },
-
- /**
- * @return {!Array.<!WebInspector.RemoteObjectProperty>}
- */
- _children: function()
- {
- if (!this.hasChildren)
- return [];
- var value = /** @type {!Object} */ (this._value);
-
- /**
- * @param {string} propName
- * @return {!WebInspector.RemoteObjectProperty}
- */
- function buildProperty(propName)
- {
- var propValue = value[propName];
- if (!(propValue instanceof WebInspector.RemoteObject))
- propValue = WebInspector.RemoteObject.fromLocalObject(propValue);
- return new WebInspector.RemoteObjectProperty(propName, propValue);
- }
- if (!this._cachedChildren)
- this._cachedChildren = Object.keys(value).map(buildProperty);
- return this._cachedChildren;
- },
-
- /**
- * @return {boolean}
- */
- isError: function()
- {
- return false;
- },
-
- /**
- * @override
- * @return {number}
- */
- arrayLength: function()
- {
- return Array.isArray(this._value) ? this._value.length : 0;
- },
+ function formatObjectItem(property) {
+ var name = property.name;
+ if (/^\s|\s$|^$|\n/.test(name))
+ name = '"' + name.replace(/\n/g, '\u21B5') + '"';
+ return name + ': ' + this._formatValue(property.value);
+ }
- /**
- * @override
- * @param {function(this:Object, ...)} functionDeclaration
- * @param {!Array.<!RuntimeAgent.CallArgument>=} args
- * @param {function(?WebInspector.RemoteObject, boolean=)=} callback
- */
- callFunction: function(functionDeclaration, args, callback)
- {
- var target = /** @type {?Object} */ (this._value);
- var rawArgs = args ? args.map(function(arg) { return arg.value; }) : [];
-
- var result;
- var wasThrown = false;
- try {
- result = functionDeclaration.apply(target, rawArgs);
- } catch (e) {
- wasThrown = true;
- }
+ if (this.type === 'object') {
+ switch (this.subtype) {
+ case 'array':
+ this._cachedDescription = this._concatenate('[', ']', formatArrayItem.bind(this));
+ break;
+ case 'date':
+ this._cachedDescription = '' + this._value;
+ break;
+ case 'null':
+ this._cachedDescription = 'null';
+ break;
+ default:
+ this._cachedDescription = this._concatenate('{', '}', formatObjectItem.bind(this));
+ }
+ } else {
+ this._cachedDescription = String(this._value);
+ }
- if (!callback)
- return;
- callback(WebInspector.RemoteObject.fromLocalObject(result), wasThrown);
- },
+ return this._cachedDescription;
+ }
+
+ /**
+ * @param {?WebInspector.RemoteObject} value
+ * @return {string}
+ */
+ _formatValue(value) {
+ if (!value)
+ return 'undefined';
+ var description = value.description || '';
+ if (value.type === 'string')
+ return '"' + description.replace(/\n/g, '\u21B5') + '"';
+ return description;
+ }
+
+ /**
+ * @param {string} prefix
+ * @param {string} suffix
+ * @param {function(!WebInspector.RemoteObjectProperty)} formatProperty
+ * @return {string}
+ */
+ _concatenate(prefix, suffix, formatProperty) {
+ var previewChars = 100;
+
+ var buffer = prefix;
+ var children = this._children();
+ for (var i = 0; i < children.length; ++i) {
+ var itemDescription = formatProperty(children[i]);
+ if (buffer.length + itemDescription.length > previewChars) {
+ buffer += ',\u2026';
+ break;
+ }
+ if (i)
+ buffer += ', ';
+ buffer += itemDescription;
+ }
+ buffer += suffix;
+ return buffer;
+ }
+
+ /**
+ * @override
+ * @return {string}
+ */
+ get type() {
+ return typeof this._value;
+ }
+
+ /**
+ * @override
+ * @return {string|undefined}
+ */
+ get subtype() {
+ if (this._value === null)
+ return 'null';
+
+ if (Array.isArray(this._value))
+ return 'array';
+
+ if (this._value instanceof Date)
+ return 'date';
+
+ return undefined;
+ }
+
+ /**
+ * @override
+ * @return {boolean}
+ */
+ get hasChildren() {
+ if ((typeof this._value !== 'object') || (this._value === null))
+ return false;
+ return !!Object.keys(/** @type {!Object} */ (this._value)).length;
+ }
+
+ /**
+ * @override
+ * @param {function(?Array.<!WebInspector.RemoteObjectProperty>, ?Array.<!WebInspector.RemoteObjectProperty>)} callback
+ */
+ getOwnProperties(callback) {
+ callback(this._children(), null);
+ }
+
+ /**
+ * @override
+ * @param {boolean} accessorPropertiesOnly
+ * @param {function(?Array.<!WebInspector.RemoteObjectProperty>, ?Array.<!WebInspector.RemoteObjectProperty>)} callback
+ */
+ getAllProperties(accessorPropertiesOnly, callback) {
+ if (accessorPropertiesOnly)
+ callback([], null);
+ else
+ callback(this._children(), null);
+ }
+
+ /**
+ * @return {!Array.<!WebInspector.RemoteObjectProperty>}
+ */
+ _children() {
+ if (!this.hasChildren)
+ return [];
+ var value = /** @type {!Object} */ (this._value);
/**
- * @override
- * @param {function(this:Object)} functionDeclaration
- * @param {!Array.<!RuntimeAgent.CallArgument>|undefined} args
- * @param {function(*)} callback
+ * @param {string} propName
+ * @return {!WebInspector.RemoteObjectProperty}
*/
- callFunctionJSON: function(functionDeclaration, args, callback)
- {
- var target = /** @type {?Object} */ (this._value);
- var rawArgs = args ? args.map(function(arg) { return arg.value; }) : [];
-
- var result;
- try {
- result = functionDeclaration.apply(target, rawArgs);
- } catch (e) {
- result = null;
- }
+ function buildProperty(propName) {
+ var propValue = value[propName];
+ if (!(propValue instanceof WebInspector.RemoteObject))
+ propValue = WebInspector.RemoteObject.fromLocalObject(propValue);
+ return new WebInspector.RemoteObjectProperty(propName, propValue);
+ }
+ if (!this._cachedChildren)
+ this._cachedChildren = Object.keys(value).map(buildProperty);
+ return this._cachedChildren;
+ }
+
+ /**
+ * @return {boolean}
+ */
+ isError() {
+ return false;
+ }
+
+ /**
+ * @override
+ * @return {number}
+ */
+ arrayLength() {
+ return Array.isArray(this._value) ? this._value.length : 0;
+ }
+
+ /**
+ * @override
+ * @param {function(this:Object, ...)} functionDeclaration
+ * @param {!Array.<!RuntimeAgent.CallArgument>=} args
+ * @param {function(?WebInspector.RemoteObject, boolean=)=} callback
+ */
+ callFunction(functionDeclaration, args, callback) {
+ var target = /** @type {?Object} */ (this._value);
+ var rawArgs = args ? args.map(function(arg) {
+ return arg.value;
+ }) :
+ [];
+
+ var result;
+ var wasThrown = false;
+ try {
+ result = functionDeclaration.apply(target, rawArgs);
+ } catch (e) {
+ wasThrown = true;
+ }
- callback(result);
- },
+ if (!callback)
+ return;
+ callback(WebInspector.RemoteObject.fromLocalObject(result), wasThrown);
+ }
+
+ /**
+ * @override
+ * @param {function(this:Object)} functionDeclaration
+ * @param {!Array.<!RuntimeAgent.CallArgument>|undefined} args
+ * @param {function(*)} callback
+ */
+ callFunctionJSON(functionDeclaration, args, callback) {
+ var target = /** @type {?Object} */ (this._value);
+ var rawArgs = args ? args.map(function(arg) {
+ return arg.value;
+ }) :
+ [];
+
+ var result;
+ try {
+ result = functionDeclaration.apply(target, rawArgs);
+ } catch (e) {
+ result = null;
+ }
- __proto__: WebInspector.RemoteObject.prototype
+ callback(result);
+ }
};
/**
- * @constructor
- * @param {!WebInspector.RemoteObject} object
+ * @unrestricted
*/
-WebInspector.RemoteArray = function(object)
-{
+WebInspector.RemoteArray = class {
+ /**
+ * @param {!WebInspector.RemoteObject} object
+ */
+ constructor(object) {
this._object = object;
-};
-
-/**
- * @param {?WebInspector.RemoteObject} object
- * @return {!WebInspector.RemoteArray}
- */
-WebInspector.RemoteArray.objectAsArray = function(object)
-{
- if (!object || object.type !== "object" || (object.subtype !== "array" && object.subtype !== "typedarray"))
- throw new Error("Object is empty or not an array");
+ }
+
+ /**
+ * @param {?WebInspector.RemoteObject} object
+ * @return {!WebInspector.RemoteArray}
+ */
+ static objectAsArray(object) {
+ if (!object || object.type !== 'object' || (object.subtype !== 'array' && object.subtype !== 'typedarray'))
+ throw new Error('Object is empty or not an array');
return new WebInspector.RemoteArray(object);
-};
+ }
-/**
- * @param {!Array<!WebInspector.RemoteObject>} objects
- * @return {!Promise<!WebInspector.RemoteArray>}
- */
-WebInspector.RemoteArray.createFromRemoteObjects = function(objects)
-{
+ /**
+ * @param {!Array<!WebInspector.RemoteObject>} objects
+ * @return {!Promise<!WebInspector.RemoteArray>}
+ */
+ static createFromRemoteObjects(objects) {
if (!objects.length)
- throw new Error("Input array is empty");
+ throw new Error('Input array is empty');
var objectArguments = [];
for (var i = 0; i < objects.length; ++i)
- objectArguments.push(WebInspector.RemoteObject.toCallArgument(objects[i]));
+ objectArguments.push(WebInspector.RemoteObject.toCallArgument(objects[i]));
return objects[0].callFunctionPromise(createArray, objectArguments).then(returnRemoteArray);
/**
* @return {!Array<*>}
*/
- function createArray()
- {
- if (arguments.length > 1)
- return new Array(arguments);
- return [arguments[0]];
+ function createArray() {
+ if (arguments.length > 1)
+ return new Array(arguments);
+ return [arguments[0]];
}
/**
* @param {!WebInspector.CallFunctionResult} result
* @return {!WebInspector.RemoteArray}
*/
- function returnRemoteArray(result)
- {
- if (result.wasThrown || !result.object)
- throw new Error("Call function throws exceptions or returns empty value");
- return WebInspector.RemoteArray.objectAsArray(result.object);
+ function returnRemoteArray(result) {
+ if (result.wasThrown || !result.object)
+ throw new Error('Call function throws exceptions or returns empty value');
+ return WebInspector.RemoteArray.objectAsArray(result.object);
}
-};
+ }
+
+ /**
+ * @param {number} index
+ * @return {!Promise<!WebInspector.RemoteObject>}
+ */
+ at(index) {
+ if (index < 0 || index > this._object.arrayLength())
+ throw new Error('Out of range');
+ return this._object.callFunctionPromise(at, [WebInspector.RemoteObject.toCallArgument(index)])
+ .then(assertCallFunctionResult);
-WebInspector.RemoteArray.prototype = {
/**
+ * @suppressReceiverCheck
* @param {number} index
- * @return {!Promise<!WebInspector.RemoteObject>}
- */
- at: function(index)
- {
- if (index < 0 || index > this._object.arrayLength())
- throw new Error("Out of range");
- return this._object.callFunctionPromise(at, [WebInspector.RemoteObject.toCallArgument(index)]).then(assertCallFunctionResult);
-
- /**
- * @suppressReceiverCheck
- * @param {number} index
- * @return {*}
- * @this {!Object}
- */
- function at(index)
- {
- return this[index];
- }
-
- /**
- * @param {!WebInspector.CallFunctionResult} result
- * @return {!WebInspector.RemoteObject}
- */
- function assertCallFunctionResult(result)
- {
- if (result.wasThrown || !result.object)
- throw new Error("Exception in callFunction or result value is empty");
- return result.object;
- }
- },
-
- /**
- * @return {number}
+ * @return {*}
+ * @this {!Object}
*/
- length: function()
- {
- return this._object.arrayLength();
- },
-
- /**
- * @param {function(!WebInspector.RemoteObject):!Promise<T>} func
- * @return {!Promise<!Array<T>>}
- * @template T
- */
- map: function(func)
- {
- var promises = [];
- for (var i = 0; i < this.length(); ++i)
- promises.push(this.at(i).then(func));
- return Promise.all(promises);
- },
+ function at(index) {
+ return this[index];
+ }
/**
+ * @param {!WebInspector.CallFunctionResult} result
* @return {!WebInspector.RemoteObject}
*/
- object: function()
- {
- return this._object;
+ function assertCallFunctionResult(result) {
+ if (result.wasThrown || !result.object)
+ throw new Error('Exception in callFunction or result value is empty');
+ return result.object;
}
+ }
+
+ /**
+ * @return {number}
+ */
+ length() {
+ return this._object.arrayLength();
+ }
+
+ /**
+ * @param {function(!WebInspector.RemoteObject):!Promise<T>} func
+ * @return {!Promise<!Array<T>>}
+ * @template T
+ */
+ map(func) {
+ var promises = [];
+ for (var i = 0; i < this.length(); ++i)
+ promises.push(this.at(i).then(func));
+ return Promise.all(promises);
+ }
+
+ /**
+ * @return {!WebInspector.RemoteObject}
+ */
+ object() {
+ return this._object;
+ }
};
-/**
- * @constructor
- * @param {!WebInspector.RemoteObject} object
- */
-WebInspector.RemoteFunction = function(object)
-{
- this._object = object;
-};
/**
- * @param {?WebInspector.RemoteObject} object
- * @return {!WebInspector.RemoteFunction}
+ * @unrestricted
*/
-WebInspector.RemoteFunction.objectAsFunction = function(object)
-{
- if (!object || object.type !== "function")
- throw new Error("Object is empty or not a function");
+WebInspector.RemoteFunction = class {
+ /**
+ * @param {!WebInspector.RemoteObject} object
+ */
+ constructor(object) {
+ this._object = object;
+ }
+
+ /**
+ * @param {?WebInspector.RemoteObject} object
+ * @return {!WebInspector.RemoteFunction}
+ */
+ static objectAsFunction(object) {
+ if (!object || object.type !== 'function')
+ throw new Error('Object is empty or not a function');
return new WebInspector.RemoteFunction(object);
-};
+ }
+
+ /**
+ * @return {!Promise<!WebInspector.RemoteObject>}
+ */
+ targetFunction() {
+ return this._object.getOwnPropertiesPromise().then(targetFunction.bind(this));
-WebInspector.RemoteFunction.prototype = {
/**
- * @return {!Promise<!WebInspector.RemoteObject>}
+ * @param {!{properties: ?Array<!WebInspector.RemoteObjectProperty>, internalProperties: ?Array<!WebInspector.RemoteObjectProperty>}} ownProperties
+ * @return {!WebInspector.RemoteObject}
+ * @this {WebInspector.RemoteFunction}
*/
- targetFunction: function()
- {
- return this._object.getOwnPropertiesPromise().then(targetFunction.bind(this));
-
- /**
- * @param {!{properties: ?Array<!WebInspector.RemoteObjectProperty>, internalProperties: ?Array<!WebInspector.RemoteObjectProperty>}} ownProperties
- * @return {!WebInspector.RemoteObject}
- * @this {WebInspector.RemoteFunction}
- */
- function targetFunction(ownProperties)
- {
- if (!ownProperties.internalProperties)
- return this._object;
- var internalProperties = ownProperties.internalProperties;
- for (var property of internalProperties) {
- if (property.name === "[[TargetFunction]]")
- return property.value;
- }
- return this._object;
- }
- },
+ function targetFunction(ownProperties) {
+ if (!ownProperties.internalProperties)
+ return this._object;
+ var internalProperties = ownProperties.internalProperties;
+ for (var property of internalProperties) {
+ if (property.name === '[[TargetFunction]]')
+ return property.value;
+ }
+ return this._object;
+ }
+ }
+
+ /**
+ * @return {!Promise<?WebInspector.DebuggerModel.FunctionDetails>}
+ */
+ targetFunctionDetails() {
+ return this.targetFunction().then(functionDetails.bind(this));
/**
+ * @param {!WebInspector.RemoteObject} targetFunction
* @return {!Promise<?WebInspector.DebuggerModel.FunctionDetails>}
+ * @this {WebInspector.RemoteFunction}
*/
- targetFunctionDetails: function()
- {
- return this.targetFunction().then(functionDetails.bind(this));
-
- /**
- * @param {!WebInspector.RemoteObject} targetFunction
- * @return {!Promise<?WebInspector.DebuggerModel.FunctionDetails>}
- * @this {WebInspector.RemoteFunction}
- */
- function functionDetails(targetFunction)
- {
- var boundReleaseFunctionDetails = releaseTargetFunction.bind(null, this._object !== targetFunction ? targetFunction : null);
- return targetFunction.debuggerModel().functionDetailsPromise(targetFunction).then(boundReleaseFunctionDetails);
- }
-
- /**
- * @param {?WebInspector.RemoteObject} targetFunction
- * @param {?WebInspector.DebuggerModel.FunctionDetails} functionDetails
- * @return {?WebInspector.DebuggerModel.FunctionDetails}
- */
- function releaseTargetFunction(targetFunction, functionDetails)
- {
- if (targetFunction)
- targetFunction.release();
- return functionDetails;
- }
- },
+ function functionDetails(targetFunction) {
+ var boundReleaseFunctionDetails =
+ releaseTargetFunction.bind(null, this._object !== targetFunction ? targetFunction : null);
+ return targetFunction.debuggerModel().functionDetailsPromise(targetFunction).then(boundReleaseFunctionDetails);
+ }
/**
- * @return {!WebInspector.RemoteObject}
+ * @param {?WebInspector.RemoteObject} targetFunction
+ * @param {?WebInspector.DebuggerModel.FunctionDetails} functionDetails
+ * @return {?WebInspector.DebuggerModel.FunctionDetails}
*/
- object: function()
- {
- return this._object;
+ function releaseTargetFunction(targetFunction, functionDetails) {
+ if (targetFunction)
+ targetFunction.release();
+ return functionDetails;
}
+ }
+
+ /**
+ * @return {!WebInspector.RemoteObject}
+ */
+ object() {
+ return this._object;
+ }
};
+
+

Powered by Google App Engine
This is Rietveld 408576698