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

Side by Side Diff: Source/devtools/front_end/sdk/RemoteObject.js

Issue 1268353005: [DevTools] Support JQuery event listeners (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 11 matching lines...) Expand all
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 /** 31 /**
32 * @typedef {{object: ?WebInspector.RemoteObject, wasThrown: (boolean|undefined) }}
33 */
34 WebInspector.CallFunctionResult;
35
36 /**
32 * This may not be an interface due to "instanceof WebInspector.RemoteObject" ch ecks in the code. 37 * This may not be an interface due to "instanceof WebInspector.RemoteObject" ch ecks in the code.
33 * 38 *
34 * @constructor 39 * @constructor
35 */ 40 */
36 WebInspector.RemoteObject = function() { } 41 WebInspector.RemoteObject = function() { }
37 42
38 WebInspector.RemoteObject.prototype = { 43 WebInspector.RemoteObject.prototype = {
39 44
40 /** 45 /**
41 * @return {?RuntimeAgent.CustomPreview} 46 * @return {?RuntimeAgent.CustomPreview}
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 162
158 /** 163 /**
159 * @return {!Promise<?Array<!WebInspector.EventListener>>} 164 * @return {!Promise<?Array<!WebInspector.EventListener>>}
160 */ 165 */
161 eventListeners: function() 166 eventListeners: function()
162 { 167 {
163 throw "Not implemented"; 168 throw "Not implemented";
164 }, 169 },
165 170
166 /** 171 /**
172 * @param {function(this:Object):!Array<!{handler:function(), useCapture: bo olean, type:string}>} getter
173 * @return {!Promise<?Array<!WebInspector.EventListener>>}
174 */
175 frameworkEventListeners: function(getter)
176 {
177 throw "Not implemented";
178 },
179
180 /**
181 * @param {function(this:Object):!Array<function()>} getter
182 * @return {!Promise<?WebInspector.RemoteSet>}
183 */
184 frameworkInternalHandlers: function(getter)
185 {
186 throw "Not implemented";
187 },
188
189 /**
167 * @param {!RuntimeAgent.CallArgument} name 190 * @param {!RuntimeAgent.CallArgument} name
168 * @param {function(string=)} callback 191 * @param {function(string=)} callback
169 */ 192 */
170 deleteProperty: function(name, callback) 193 deleteProperty: function(name, callback)
171 { 194 {
172 throw "Not implemented"; 195 throw "Not implemented";
173 }, 196 },
174 197
175 /** 198 /**
176 * @param {function(this:Object, ...)} functionDeclaration 199 * @param {function(this:Object, ...)} functionDeclaration
177 * @param {!Array.<!RuntimeAgent.CallArgument>=} args 200 * @param {!Array.<!RuntimeAgent.CallArgument>=} args
178 * @param {function(?WebInspector.RemoteObject, boolean=)=} callback 201 * @param {function(?WebInspector.RemoteObject, boolean=)=} callback
179 */ 202 */
180 callFunction: function(functionDeclaration, args, callback) 203 callFunction: function(functionDeclaration, args, callback)
181 { 204 {
182 throw "Not implemented"; 205 throw "Not implemented";
183 }, 206 },
184 207
185 /** 208 /**
186 * @param {function(this:Object, ...)} functionDeclaration 209 * @param {function(this:Object, ...)} functionDeclaration
187 * @param {!Array.<!RuntimeAgent.CallArgument>=} args 210 * @param {!Array.<!RuntimeAgent.CallArgument>=} args
188 * @return {!Promise.<!{object: ?WebInspector.RemoteObject, wasThrown: (bool ean|undefined)}>} 211 * @return {!Promise<!WebInspector.CallFunctionResult>}
189 */ 212 */
190 callFunctionPromise: function(functionDeclaration, args) 213 callFunctionPromise: function(functionDeclaration, args)
191 { 214 {
192 return new Promise(promiseConstructor.bind(this)); 215 return new Promise(promiseConstructor.bind(this));
193 216
194 /** 217 /**
195 * @param {function(!{object: ?WebInspector.RemoteObject, wasThrown: (bo olean|undefined)})} success 218 * @param {function(!WebInspector.CallFunctionResult)} success
196 * @this {WebInspector.RemoteObject} 219 * @this {WebInspector.RemoteObject}
197 */ 220 */
198 function promiseConstructor(success) 221 function promiseConstructor(success)
199 { 222 {
200 this.callFunction(functionDeclaration, args, callFunctionCallback.bi nd(null, success)); 223 this.callFunction(functionDeclaration, args, callFunctionCallback.bi nd(null, success));
201 } 224 }
202 225
203 /** 226 /**
204 * @param {function(!{object: ?WebInspector.RemoteObject, wasThrown: (bo olean|undefined)})} callback 227 * @param {function(!WebInspector.CallFunctionResult)} callback
205 * @param {?WebInspector.RemoteObject} object 228 * @param {?WebInspector.RemoteObject} object
206 * @param {boolean=} wasThrown 229 * @param {boolean=} wasThrown
207 */ 230 */
208 function callFunctionCallback(callback, object, wasThrown) 231 function callFunctionCallback(callback, object, wasThrown)
209 { 232 {
210 callback({ 233 callback({
211 object: object, 234 object: object,
212 wasThrown: wasThrown 235 wasThrown: wasThrown
213 }); 236 });
214 } 237 }
215 }, 238 },
216 239
217 /** 240 /**
218 * @param {function(this:Object)} functionDeclaration 241 * @param {function(this:Object, ...)} functionDeclaration
219 * @param {!Array<!RuntimeAgent.CallArgument>|undefined} args 242 * @param {!Array<!RuntimeAgent.CallArgument>|undefined} args
220 * @param {function(*)} callback 243 * @param {function(*)} callback
221 */ 244 */
222 callFunctionJSON: function(functionDeclaration, args, callback) 245 callFunctionJSON: function(functionDeclaration, args, callback)
223 { 246 {
224 throw "Not implemented"; 247 throw "Not implemented";
225 }, 248 },
226 249
227 /** 250 /**
228 * @param {function(this:Object)} functionDeclaration 251 * @param {function(this:Object, ...)} functionDeclaration
229 * @param {!Array<!RuntimeAgent.CallArgument>|undefined} args 252 * @param {!Array<!RuntimeAgent.CallArgument>|undefined} args
230 * @return {!Promise<*>} 253 * @return {!Promise<*>}
231 */ 254 */
232 callFunctionJSONPromise: function(functionDeclaration, args) 255 callFunctionJSONPromise: function(functionDeclaration, args)
233 { 256 {
234 return new Promise(promiseConstructor.bind(this)); 257 return new Promise(promiseConstructor.bind(this));
235 258
236 /** 259 /**
237 * @this {WebInspector.RemoteObject} 260 * @this {WebInspector.RemoteObject}
238 */ 261 */
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 return new WebInspector.EventListener(this._target, 581 return new WebInspector.EventListener(this._target,
559 payload.type, 582 payload.type,
560 payload.useCapture, 583 payload.useCapture,
561 payload.handler ? this.tar get().runtimeModel.createRemoteObject(payload.handler) : null, 584 payload.handler ? this.tar get().runtimeModel.createRemoteObject(payload.handler) : null,
562 WebInspector.DebuggerModel .Location.fromPayload(this._debuggerModel, payload.location)); 585 WebInspector.DebuggerModel .Location.fromPayload(this._debuggerModel, payload.location));
563 } 586 }
564 } 587 }
565 }, 588 },
566 589
567 /** 590 /**
591 * @override
592 * @param {function(this:Object):!Array<!{handler:function(), useCapture: bo olean, type:string}>} getter
593 * @return {!Promise<?Array<!WebInspector.EventListener>>}
594 */
595 frameworkEventListeners: function(getter)
pfeldman 2015/08/27 01:21:32 This does not belong to RemoteObject, I thought we
596 {
597 return this.callFunctionPromise(getter, undefined)
598 .then(WebInspector.assertCallFunctionResult)
599 .then(WebInspector.RemoteArray.createPromise)
600 .then(toEventListeners)
601 .catchException(/** @type {?Array<!WebInspector.EventListener >} */(null));
602
603 /**
604 * @param {!WebInspector.RemoteArray} array
605 * @return {!Promise<?Array<!WebInspector.EventListener>>}
606 */
607 function toEventListeners(array)
608 {
609 var promises = [];
610 for (var i = 0; i < array.length(); ++i) {
611 var promise = array.at(i)
612 .then(WebInspector.assertCallFunctionResult)
613 .then(toEventListener)
614 .catchException(/** @type {?WebInspector.Even tListener} */(null));
615 promises.push(promise);
616 }
617 return /** @type {!Promise<?Array<!WebInspector.EventListener>>} */( Promise.all(promises).then(nonEmptyListeners));
618 }
619
620 /**
621 * @param {!WebInspector.RemoteObject} object
622 * @return {!Promise<!WebInspector.EventListener>}
623 */
624 function toEventListener(object)
625 {
626 var data = {};
627 var promises = [];
628 promises.push(object.callFunctionPromise(listenerEffectiveFunction, undefined)
629 .then(WebInspector.assertCallFunctionResult)
630 .then(WebInspector.RemoteFunction.createPromise)
631 .then(storeTargetFunctionWithDetails.bind(null, data)));
632 promises.push(object.callFunctionJSONPromise(WebInspector.identity, undefined)
633 .then(WebInspector.storeTo.bind(null, data, "lis tenerJSON")));
634 return Promise.all(promises).then(createEventListener.bind(null, /** @type {!{targetFunction: !WebInspector.RemoteObject, listenerJSON: !Object, tar getFunctionDetails: !WebInspector.DebuggerModel.FunctionDetails}}*/ (data)));
635 }
636
637 /**
638 * @param {?} data
639 * @param {!WebInspector.RemoteFunction} functionObject
640 * @return {!Promise<void>}
641 */
642 function storeTargetFunctionWithDetails(data, functionObject)
643 {
644 return functionObject.targetFunction()
645 .then(WebInspector.storeTo.bind(null, data, "ta rgetFunction"))
646 .then(functionDetails);
647
648 /**
649 * @param {!WebInspector.RemoteObject} functionObject
650 * @return {!Promise<void>}
651 */
652 function functionDetails(functionObject)
653 {
654 return functionObject.functionDetailsPromise()
655 .then(WebInspector.storeTo.bind(null, data, "targetFunctionDetails"));
656 }
657 }
658
659 /**
660 * @param {!{targetFunction: !WebInspector.RemoteObject, listenerJSON: ! Object, targetFunctionDetails: !WebInspector.DebuggerModel.FunctionDetails}} dat a
661 * @return {!WebInspector.EventListener}
662 */
663 function createEventListener(data)
664 {
665 return new WebInspector.EventListener(data.targetFunction._target,
666 data.listenerJSON.type,
667 data.listenerJSON.useCapture,
668 data.targetFunction,
669 /** @type {!WebInspector.Debug gerModel.Location}} */ (data.targetFunctionDetails.location));
670 }
671
672 /**
673 * @suppressReceiverCheck
674 * @return {function()}
675 * @this {Object}
676 */
677 function listenerEffectiveFunction()
678 {
679 if (typeof this.handler === "function")
680 return this.handler;
681 return typeof this.handler === "object" ? (this.handler.handlerEvent || this.handler.constructor) : null;
682 }
683
684 /**
685 * @param {!Array<?WebInspector.EventListener>} listeners
686 * @return {!Array<!WebInspector.EventListener>}
687 */
688 function nonEmptyListeners(listeners)
689 {
690 return listeners.filter(filterOutEmpty);
691
692 /**
693 * @param {?WebInspector.EventListener} listener
694 */
695 function filterOutEmpty(listener)
696 {
697 return !!listener;
698 }
699 }
700 },
701
702 /**
703 * @override
704 * @param {function(this:Object):!Array<function()>} getter
705 * @return {!Promise<?WebInspector.RemoteSet>}
706 */
707 frameworkInternalHandlers: function(getter)
708 {
709 return this.callFunctionPromise(getter, undefined)
710 .then(WebInspector.assertCallFunctionResult)
711 .then(WebInspector.RemoteArray.createPromise)
712 .then(toInternalHandlers.bind(this))
713 .catchException(/** @type {?WebInspector.RemoteSet} */(null)) ;
714
715 /**
716 * @param {!WebInspector.RemoteArray} array
717 * @return {!Promise<!WebInspector.RemoteSet>}
718 * @this {WebInspector.RemoteObject}
719 */
720 function toInternalHandlers(array)
721 {
722 var promises = [];
723 for (var i = 0; i < array.length(); ++i) {
724 var promise = array.at(i)
725 .then(WebInspector.assertCallFunctionResult)
726 .then(WebInspector.RemoteFunction.createPromi se)
727 .then(toInternalHandler)
728 .catchException(/** @type {?WebInspector.Remo teObject} */(null));
729 promises.push(promise);
730 }
731 return Promise.all(promises).then(nonEmptyHandlers).then(WebInspecto r.RemoteSet.createFromArrayPromise.bind(this));
732 }
733
734 /**
735 * @param {!WebInspector.RemoteFunction} handler
736 * @return {!Promise<!WebInspector.RemoteObject>}
737 */
738 function toInternalHandler(handler)
739 {
740 return handler.targetFunction();
741 }
742
743 /**
744 * @param {!Array<?WebInspector.RemoteObject>} handlers
745 * @return {!Array<!WebInspector.RemoteObject>}
746 */
747 function nonEmptyHandlers(handlers)
748 {
749 return handlers.filter(filterOutEmpty);
750
751 /**
752 * @param {?WebInspector.RemoteObject} handler
753 */
754 function filterOutEmpty(handler)
755 {
756 return !!handler;
757 }
758 }
759 },
760
761 /**
568 * @param {!Array.<string>} propertyPath 762 * @param {!Array.<string>} propertyPath
569 * @param {function(?WebInspector.RemoteObject, boolean=)} callback 763 * @param {function(?WebInspector.RemoteObject, boolean=)} callback
570 */ 764 */
571 getProperty: function(propertyPath, callback) 765 getProperty: function(propertyPath, callback)
572 { 766 {
573 /** 767 /**
574 * @param {string} arrayStr 768 * @param {string} arrayStr
575 * @suppressReceiverCheck 769 * @suppressReceiverCheck
576 * @this {Object} 770 * @this {Object}
577 */ 771 */
(...skipping 777 matching lines...) Expand 10 before | Expand all | Expand 10 after
1355 { 1549 {
1356 if (!this._cachedDescription) { 1550 if (!this._cachedDescription) {
1357 var children = this._children(); 1551 var children = this._children();
1358 this._cachedDescription = "{" + this._formatValue(children[0].value) + " => " + this._formatValue(children[1].value) + "}"; 1552 this._cachedDescription = "{" + this._formatValue(children[0].value) + " => " + this._formatValue(children[1].value) + "}";
1359 } 1553 }
1360 return this._cachedDescription; 1554 return this._cachedDescription;
1361 }, 1555 },
1362 1556
1363 __proto__: WebInspector.LocalJSONObject.prototype 1557 __proto__: WebInspector.LocalJSONObject.prototype
1364 } 1558 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698