Index: third_party/WebKit/Source/devtools/front_end/sdk/RuntimeModel.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/RuntimeModel.js b/third_party/WebKit/Source/devtools/front_end/sdk/RuntimeModel.js |
index 27c6654ac05900f7b7272db5b86f7dce987913c5..9b35e0e03aa181ab40d50fc250de41938eb7e68e 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/sdk/RuntimeModel.js |
+++ b/third_party/WebKit/Source/devtools/front_end/sdk/RuntimeModel.js |
@@ -526,9 +526,53 @@ WebInspector.ExecutionContext.prototype = { |
} |
/** |
+ * @param {!WebInspector.RemoteObject} object |
+ * @return {!Promise<?WebInspector.RemoteObject>} |
+ */ |
+ function extractTarget(object) |
+ { |
+ if (object.type !== "object" || object.subtype !== "proxy") |
+ return Promise.resolve(/** @type {?WebInspector.RemoteObject} */(object)); |
+ var callback; |
+ var promise = new Promise(fullfill => callback = fullfill); |
+ object.getOwnProperties(extractTargetFromProperties); |
lushnikov
2016/05/05 01:06:03
return object.getOwnPropertiesPromise()
.then(f
kozy
2016/05/05 01:35:22
Done.
|
+ return promise; |
+ |
+ /** |
+ * @param {?Array<!WebInspector.RemoteObjectProperty>} properties |
+ * @param {?Array.<!WebInspector.RemoteObjectProperty>} internalProperties |
+ */ |
+ function extractTargetFromProperties(properties, internalProperties) |
+ { |
+ internalProperties = internalProperties || []; |
lushnikov
2016/05/05 01:06:04
var target = internalProperties.find(property => p
kozy
2016/05/05 01:35:22
Done.
|
+ for (var property of internalProperties) { |
+ if (property.name === "[[Target]]") { |
+ extractTarget(property.value).then(callback); |
+ return; |
+ } |
+ } |
+ callback(null); |
+ } |
+ } |
+ |
+ /** |
+ * @param {?WebInspector.RemoteObject} object |
+ * @return {!Promise<?Object>} |
+ */ |
+ function completionsForObject(object) |
+ { |
+ if (!object) |
+ return Promise.resolve(/** @type {?Object} */(null)); |
+ var callback; |
+ var promise = new Promise(fullfill => callback = fullfill); |
+ object.callFunctionJSON(getCompletions, [WebInspector.RemoteObject.toCallArgument(object.subtype)], callback); |
+ return promise; |
+ } |
+ |
+ /** |
* @param {string=} type |
* @suppressReceiverCheck |
- * @this {WebInspector.ExecutionContext} |
+ * @this {*} |
*/ |
function getCompletions(type) |
{ |
@@ -547,7 +591,7 @@ WebInspector.ExecutionContext.prototype = { |
for (var o = object; o; o = o.__proto__) { |
if (type === "array" && o === object && ArrayBuffer.isView(o) && o.length > 9999) |
continue; |
- var names = Object.getOwnPropertyNames(o); |
+ var names = Object.getOwnPropertyNames(/** @type{!Object} */(o)); |
var isArray = Array.isArray(o); |
for (var i = 0; i < names.length; ++i) { |
// Skip array elements indexes. |
@@ -561,8 +605,8 @@ WebInspector.ExecutionContext.prototype = { |
return resultSet; |
} |
- if (result.type === "object" || result.type === "function") |
- result.callFunctionJSON(getCompletions, [WebInspector.RemoteObject.toCallArgument(result.subtype)], receivedPropertyNames.bind(this)); |
+ if (result.type === "object") |
+ extractTarget(result).then(completionsForObject).then(receivedPropertyNames.bind(this)); |
else if (result.type === "string" || result.type === "number" || result.type === "boolean") |
this.evaluate("(" + getCompletions + ")(\"" + result.type + "\")", "completion", false, true, true, false, false, receivedPropertyNamesFromEval.bind(this)); |
} |
@@ -576,12 +620,13 @@ WebInspector.ExecutionContext.prototype = { |
function receivedPropertyNamesFromEval(notRelevant, wasThrown, result) |
{ |
if (result && !wasThrown) |
- receivedPropertyNames.call(this, result.value); |
+ receivedPropertyNames.call(this, /** @type {!Object} */(result.value)); |
else |
completionsReadyCallback([]); |
} |
/** |
+ * @param {?Object} propertyNames |
* @this {WebInspector.ExecutionContext} |
*/ |
function receivedPropertyNames(propertyNames) |