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

Unified Diff: Source/devtools/front_end/sdk/RemoteObjectUtils.js

Issue 1268353005: [DevTools] Support JQuery event listeners (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 4 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: Source/devtools/front_end/sdk/RemoteObjectUtils.js
diff --git a/Source/devtools/front_end/sdk/RemoteObjectUtils.js b/Source/devtools/front_end/sdk/RemoteObjectUtils.js
new file mode 100644
index 0000000000000000000000000000000000000000..5865ab0ecd8c4155cc5411ab53d76c03344852df
--- /dev/null
+++ b/Source/devtools/front_end/sdk/RemoteObjectUtils.js
@@ -0,0 +1,248 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @param {*} data
+ * @param {*} key
+ * @param {T} value
+ * @return {T}
+ * @template T
+ */
+WebInspector.storeTo = function(data, key, value)
pfeldman 2015/08/27 01:21:32 This should go to utilities.js as a separate patch
+{
+ data[key] = value;
+ return value;
+}
+
+/**
+ * @param {!WebInspector.CallFunctionResult} result
+ * @return {!Promise<!WebInspector.RemoteObject>}
+ */
+WebInspector.assertCallFunctionResult = function(result)
pfeldman 2015/08/27 01:21:32 This seems too specific and needs to be next to th
+{
+ if (result.wasThrown || !result.object)
+ return Promise.reject(new Error("Function was thrown"));
+ return Promise.resolve(result.object);
+}
+
+/**
+ * @suppressReceiverCheck
+ * @return {T}
+ * @this {T}
+ * @template T
+ */
+WebInspector.identity = function()
pfeldman 2015/08/27 01:21:32 This is weird!
+{
+ return this;
+}
+
+/**
+ * @constructor
+ * @param {!WebInspector.RemoteObject} object
+ */
+WebInspector.RemoteArray = function(object)
pfeldman 2015/08/27 01:21:32 These could go into RemoteObject.js, lets land it
+{
+ this._object = object;
+}
+
+/**
+ * @param {?WebInspector.RemoteObject} object
+ * @return {!Promise<!WebInspector.RemoteArray>}
+ */
+WebInspector.RemoteArray.createPromise = function(object)
pfeldman 2015/08/27 01:21:32 This does not need to be a promise, there is no as
+{
+ if (!object || object.subtype !== "array")
+ return Promise.reject(new Error("Object is empty or not an array"));
+ return Promise.resolve(new WebInspector.RemoteArray(object));
+}
+
+WebInspector.RemoteArray.prototype = {
+ /**
+ * @param {number} idx
+ * @return {!Promise<!WebInspector.CallFunctionResult>}
+ */
+ at: function(idx)
pfeldman 2015/08/27 01:21:32 no abbreviations in Blink.
+ {
+ return this._object.callFunctionPromise(at, [WebInspector.RemoteObject.toCallArgument(idx)]);
+
+ /**
+ * @suppressReceiverCheck
+ * @param {number} idx
+ * @return {*}
+ * @this {!Object}
+ */
+ function at(idx)
+ {
+ return this[idx];
+ }
+ },
+
+ /**
+ * @return {number}
+ */
+ length: function()
+ {
+ return this._object.arrayLength();
+ }
+}
+
+/**
+ * @constructor
+ * @param {!WebInspector.RemoteObject} object
+ */
+WebInspector.RemoteFunction = function(object)
+{
+ this._object = object;
+}
+
+/**
+ * @param {?WebInspector.RemoteObject} object
+ * @return {!Promise<!WebInspector.RemoteFunction>}
+ */
+WebInspector.RemoteFunction.createPromise = function(object)
+{
+ if (!object || object.type !== "function")
+ return Promise.reject(new Error("Object is empty or not a function"));
+ return Promise.resolve(new WebInspector.RemoteFunction(object));
pfeldman 2015/08/27 01:21:32 ditto
+}
+
+WebInspector.RemoteFunction.prototype = {
+ /**
+ * @return {!Promise<!WebInspector.RemoteObject>}
+ */
+ targetFunction: function()
+ {
+ return this._object.getOwnPropertiesPromise().then(findTargetFunction.bind(this));
+
+ /**
+ * @param {!{properties: ?Array<!WebInspector.RemoteObjectProperty>, internalProperties: ?Array<!WebInspector.RemoteObjectProperty>}} ownProperties
+ * @return {!WebInspector.RemoteObject}
+ * @this {WebInspector.RemoteFunction}
+ */
+ function findTargetFunction(ownProperties)
+ {
+ if (!ownProperties.internalProperties)
+ return this._object;
+ var internalProperties = ownProperties.internalProperties;
+ for (var i = 0; i < internalProperties.length; ++i) {
+ if (internalProperties[i].name === "[[TargetFunction]]")
+ return internalProperties[i].value;
+ }
+ return this._object;
+ }
+ }
+}
+
+/**
+ * @constructor
+ * @param {!WebInspector.RemoteObject} object
+ */
+WebInspector.RemoteSet = function(object)
pfeldman 2015/08/27 01:21:32 Why do you need a writable wrapper like this?
+{
+ this._object = object;
+}
+
+/**
+ * @param {!Array<!WebInspector.RemoteObject>} array
+ * @return {!Promise<!WebInspector.RemoteSet>}
+ * @this {WebInspector.RemoteObject}
+ */
+WebInspector.RemoteSet.createFromArrayPromise = function(array)
+{
+ return WebInspector.RemoteSet.createEmptyPromise.call(this).then(addArray);
+ /**
+ * @param {!WebInspector.RemoteSet} remoteSet
+ * @return {!Promise<!WebInspector.RemoteSet>}
+ */
+ function addArray(remoteSet)
+ {
+ var promise = Promise.resolve(remoteSet);
+ for (var i = 0; i < array.length; ++i)
+ promise = promise.then(WebInspector.RemoteSet.prototype.add.bind(remoteSet, array[i]));
+ return promise;
+ }
+}
+
+/**
+ * @return {!Promise<!WebInspector.RemoteSet>}
+ * @this {WebInspector.RemoteObject}
+ */
+WebInspector.RemoteSet.createEmptyPromise = function()
+{
+ return this.callFunctionPromise(emptySet, undefined)
+ .then(WebInspector.assertCallFunctionResult)
+ .then(createRemoteSet);
+
+ /**
+ * @return {!Set}
+ */
+ function emptySet()
+ {
+ return new Set();
+ }
+
+ /**
+ * @param {!WebInspector.RemoteObject} object
+ * @return {!WebInspector.RemoteSet}
+ */
+ function createRemoteSet(object)
+ {
+ return new WebInspector.RemoteSet(object);
+ }
+}
+
+WebInspector.RemoteSet.prototype =
+{
+ /**
+ * @param {!WebInspector.RemoteObject} object
+ * @return {!Promise<!WebInspector.RemoteSet>}
+ */
+ add: function(object)
+ {
+ return this._object.callFunctionPromise(add, [WebInspector.RemoteObject.toCallArgument(object)])
+ .then(returnThis.bind(this));
+
+ /**
+ * @suppressReceiverCheck
+ * @param {!Object} object
+ * @return {!Set}
+ * @this {Set}
+ */
+ function add(object)
+ {
+ this.add(object);
+ return this;
+ }
+
+ /**
+ * @return {!T}
+ * @this {T}
+ * @template T
+ */
+ function returnThis()
+ {
+ return this;
+ }
+ },
+
+ /**
+ * @param {!WebInspector.RemoteObject} object
+ * @return {!Promise<boolean>}
+ */
+ has: function(object)
+ {
+ return /** @type {!Promise<boolean>} */(this._object.callFunctionJSONPromise(has, [WebInspector.RemoteObject.toCallArgument(object)]));
+
+ /**
+ * @suppressReceiverCheck
+ * @param {!Object} object
+ * @return {boolean}
+ * @this {Set}
+ */
+ function has(object)
+ {
+ return this.has(object);
+ }
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698