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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/sdk/RuntimeModel.js

Issue 1952553002: [DevTools] Auto completion for proxy uses proxy target object (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@move-property-descriptors-to-native
Patch Set: Created 4 years, 7 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
« no previous file with comments | « third_party/WebKit/LayoutTests/http/tests/inspector/console-cd-completions-expected.txt ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 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 508 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 * @this {WebInspector.ExecutionContext} 519 * @this {WebInspector.ExecutionContext}
520 */ 520 */
521 function evaluated(result, wasThrown) 521 function evaluated(result, wasThrown)
522 { 522 {
523 if (!result || wasThrown) { 523 if (!result || wasThrown) {
524 completionsReadyCallback([]); 524 completionsReadyCallback([]);
525 return; 525 return;
526 } 526 }
527 527
528 /** 528 /**
529 * @param {!WebInspector.RemoteObject} object
530 * @return {!Promise<?WebInspector.RemoteObject>}
531 */
532 function extractTarget(object)
533 {
534 if (object.type !== "object" || object.subtype !== "proxy")
535 return Promise.resolve(/** @type {?WebInspector.RemoteObject } */(object));
536 var callback;
537 var promise = new Promise(fullfill => callback = fullfill);
538 object.getOwnProperties(extractTargetFromProperties);
lushnikov 2016/05/05 01:06:03 return object.getOwnPropertiesPromise() .then(f
kozy 2016/05/05 01:35:22 Done.
539 return promise;
540
541 /**
542 * @param {?Array<!WebInspector.RemoteObjectProperty>} propertie s
543 * @param {?Array.<!WebInspector.RemoteObjectProperty>} internal Properties
544 */
545 function extractTargetFromProperties(properties, internalPropert ies)
546 {
547 internalProperties = internalProperties || [];
lushnikov 2016/05/05 01:06:04 var target = internalProperties.find(property => p
kozy 2016/05/05 01:35:22 Done.
548 for (var property of internalProperties) {
549 if (property.name === "[[Target]]") {
550 extractTarget(property.value).then(callback);
551 return;
552 }
553 }
554 callback(null);
555 }
556 }
557
558 /**
559 * @param {?WebInspector.RemoteObject} object
560 * @return {!Promise<?Object>}
561 */
562 function completionsForObject(object)
563 {
564 if (!object)
565 return Promise.resolve(/** @type {?Object} */(null));
566 var callback;
567 var promise = new Promise(fullfill => callback = fullfill);
568 object.callFunctionJSON(getCompletions, [WebInspector.RemoteObje ct.toCallArgument(object.subtype)], callback);
569 return promise;
570 }
571
572 /**
529 * @param {string=} type 573 * @param {string=} type
530 * @suppressReceiverCheck 574 * @suppressReceiverCheck
531 * @this {WebInspector.ExecutionContext} 575 * @this {*}
532 */ 576 */
533 function getCompletions(type) 577 function getCompletions(type)
534 { 578 {
535 var object; 579 var object;
536 if (type === "string") 580 if (type === "string")
537 object = new String(""); 581 object = new String("");
538 else if (type === "number") 582 else if (type === "number")
539 object = new Number(0); 583 object = new Number(0);
540 else if (type === "boolean") 584 else if (type === "boolean")
541 object = new Boolean(false); 585 object = new Boolean(false);
542 else 586 else
543 object = this; 587 object = this;
544 588
545 var resultSet = {}; 589 var resultSet = {};
546 try { 590 try {
547 for (var o = object; o; o = o.__proto__) { 591 for (var o = object; o; o = o.__proto__) {
548 if (type === "array" && o === object && ArrayBuffer.isVi ew(o) && o.length > 9999) 592 if (type === "array" && o === object && ArrayBuffer.isVi ew(o) && o.length > 9999)
549 continue; 593 continue;
550 var names = Object.getOwnPropertyNames(o); 594 var names = Object.getOwnPropertyNames(/** @type{!Object } */(o));
551 var isArray = Array.isArray(o); 595 var isArray = Array.isArray(o);
552 for (var i = 0; i < names.length; ++i) { 596 for (var i = 0; i < names.length; ++i) {
553 // Skip array elements indexes. 597 // Skip array elements indexes.
554 if (isArray && /^[0-9]/.test(names[i])) 598 if (isArray && /^[0-9]/.test(names[i]))
555 continue; 599 continue;
556 resultSet[names[i]] = true; 600 resultSet[names[i]] = true;
557 } 601 }
558 } 602 }
559 } catch (e) { 603 } catch (e) {
560 } 604 }
561 return resultSet; 605 return resultSet;
562 } 606 }
563 607
564 if (result.type === "object" || result.type === "function") 608 if (result.type === "object")
565 result.callFunctionJSON(getCompletions, [WebInspector.RemoteObje ct.toCallArgument(result.subtype)], receivedPropertyNames.bind(this)); 609 extractTarget(result).then(completionsForObject).then(receivedPr opertyNames.bind(this));
566 else if (result.type === "string" || result.type === "number" || res ult.type === "boolean") 610 else if (result.type === "string" || result.type === "number" || res ult.type === "boolean")
567 this.evaluate("(" + getCompletions + ")(\"" + result.type + "\") ", "completion", false, true, true, false, false, receivedPropertyNamesFromEval. bind(this)); 611 this.evaluate("(" + getCompletions + ")(\"" + result.type + "\") ", "completion", false, true, true, false, false, receivedPropertyNamesFromEval. bind(this));
568 } 612 }
569 613
570 /** 614 /**
571 * @param {?WebInspector.RemoteObject} notRelevant 615 * @param {?WebInspector.RemoteObject} notRelevant
572 * @param {boolean} wasThrown 616 * @param {boolean} wasThrown
573 * @param {?RuntimeAgent.RemoteObject=} result 617 * @param {?RuntimeAgent.RemoteObject=} result
574 * @this {WebInspector.ExecutionContext} 618 * @this {WebInspector.ExecutionContext}
575 */ 619 */
576 function receivedPropertyNamesFromEval(notRelevant, wasThrown, result) 620 function receivedPropertyNamesFromEval(notRelevant, wasThrown, result)
577 { 621 {
578 if (result && !wasThrown) 622 if (result && !wasThrown)
579 receivedPropertyNames.call(this, result.value); 623 receivedPropertyNames.call(this, /** @type {!Object} */(result.v alue));
580 else 624 else
581 completionsReadyCallback([]); 625 completionsReadyCallback([]);
582 } 626 }
583 627
584 /** 628 /**
629 * @param {?Object} propertyNames
585 * @this {WebInspector.ExecutionContext} 630 * @this {WebInspector.ExecutionContext}
586 */ 631 */
587 function receivedPropertyNames(propertyNames) 632 function receivedPropertyNames(propertyNames)
588 { 633 {
589 this.target().runtimeAgent().releaseObjectGroup("completion"); 634 this.target().runtimeAgent().releaseObjectGroup("completion");
590 if (!propertyNames) { 635 if (!propertyNames) {
591 completionsReadyCallback([]); 636 completionsReadyCallback([]);
592 return; 637 return;
593 } 638 }
594 var includeCommandLineAPI = (!dotNotation && !bracketNotation); 639 var includeCommandLineAPI = (!dotNotation && !bracketNotation);
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
813 /** 858 /**
814 * @param {string} listenerType 859 * @param {string} listenerType
815 */ 860 */
816 setListenerType: function(listenerType) 861 setListenerType: function(listenerType)
817 { 862 {
818 this._listenerType = listenerType; 863 this._listenerType = listenerType;
819 }, 864 },
820 865
821 __proto__: WebInspector.SDKObject.prototype 866 __proto__: WebInspector.SDKObject.prototype
822 } 867 }
OLDNEW
« no previous file with comments | « third_party/WebKit/LayoutTests/http/tests/inspector/console-cd-completions-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698