Diff
Modified: trunk/LayoutTests/ChangeLog (130397 => 130398)
--- trunk/LayoutTests/ChangeLog 2012-10-04 16:08:34 UTC (rev 130397)
+++ trunk/LayoutTests/ChangeLog 2012-10-04 16:12:42 UTC (rev 130398)
@@ -1,3 +1,16 @@
+2012-10-04 Peter Rybin <[email protected]>
+
+ Web Inspector: expose object internal properties such as PrimitiveValue or BoundThis
+ https://bugs.webkit.org/show_bug.cgi?id=94397
+
+ Reviewed by Yury Semikhatsky.
+
+ A test is added to support new feature. Old test is updated because line number changed.
+
+ * inspector-protocol/runtime-getProperties-expected.txt: Added.
+ * inspector-protocol/runtime-getProperties.html: Added.
+ * inspector/console/command-line-api-expected.txt:
+
2012-10-04 Sami Kyostila <[email protected]>
Fixed position visibility check does not consider descendants
Modified: trunk/LayoutTests/inspector/console/command-line-api-expected.txt (130397 => 130398)
--- trunk/LayoutTests/inspector/console/command-line-api-expected.txt 2012-10-04 16:08:34 UTC (rev 130397)
+++ trunk/LayoutTests/inspector/console/command-line-api-expected.txt 2012-10-04 16:12:42 UTC (rev 130398)
@@ -1,4 +1,4 @@
-CONSOLE MESSAGE: line 959: The console function $() has changed from $=getElementById(id) to $=querySelector(selector). You might try $("#%s")
+CONSOLE MESSAGE: line 984: The console function $() has changed from $=getElementById(id) to $=querySelector(selector). You might try $("#%s")
Tests that command line api works.
Added: trunk/LayoutTests/inspector-protocol/runtime-getProperties-expected.txt (0 => 130398)
--- trunk/LayoutTests/inspector-protocol/runtime-getProperties-expected.txt (rev 0)
+++ trunk/LayoutTests/inspector-protocol/runtime-getProperties-expected.txt 2012-10-04 16:12:42 UTC (rev 130398)
@@ -0,0 +1,16 @@
+Properties of Object(5)
+ __proto__ object undefined
+ foo string cat
+Properties of array
+ __proto__ object undefined
+ 0 string red
+ 1 string green
+ 2 string blue
+ length number 3
+Properties of Bound function
+ __proto__ function undefined
+ arguments
+ caller
+ length number 0
+ name string Number
+
Added: trunk/LayoutTests/inspector-protocol/runtime-getProperties.html (0 => 130398)
--- trunk/LayoutTests/inspector-protocol/runtime-getProperties.html (rev 0)
+++ trunk/LayoutTests/inspector-protocol/runtime-getProperties.html 2012-10-04 16:12:42 UTC (rev 130398)
@@ -0,0 +1,155 @@
+<html>
+<head>
+<script type="text/_javascript_" src=""
+<script>
+
+function test()
+{
+ // A general-purpose engine for sending a sequence of protocol commands.
+ // The clients provide requests and response handlers, while the engine catches
+ // errors and makes sure that once there's nothing to do completeTest() is called.
+ // @param step is an object with command, params and callback fields
+ function runRequestSeries(step) {
+ processStep(step);
+
+ function processStep(s) {
+ try {
+ processStepOrFail(s);
+ } catch (e) {
+ InspectorTest.log(e.stack);
+ InspectorTest.completeTest();
+ }
+ }
+
+ function processStepOrFail(s) {
+ if (!s) {
+ InspectorTest.completeTest();
+ return;
+ }
+ if (!s.command) {
+ // A simple loopback step.
+ var next = s.callback();
+ processStep(next);
+ return;
+ }
+
+ var innerCallback = function(response) {
+ if ("error" in response) {
+ InspectorTest.log(response.error.message);
+ InspectorTest.completeTest();
+ return;
+ }
+ var next;
+ try {
+ next = s.callback(response.result);
+ } catch (e) {
+ InspectorTest.log(e.stack);
+ InspectorTest.completeTest();
+ return;
+ }
+ processStep(next);
+ }
+ InspectorTest.sendCommand(s.command, s.params, innerCallback);
+ }
+ }
+
+ var firstStep = { callback: callbackStart5 };
+
+ runRequestSeries(firstStep);
+
+ // 'Object5' section -- check properties of '5' wrapped as object (has an internal property).
+
+ function callbackStart5() {
+ // Create an wrapper object with additional property.
+ var _expression_ = "(function(){var r = Object(5); r.foo = 'cat';return r;})()";
+
+ return { command: "Runtime.evaluate", params: {_expression_: _expression_}, callback: callbackEval5 };
+ }
+ function callbackEval5(result) {
+ var id = result.result.objectId;
+ if (id === undefined)
+ throw new Error("objectId is expected");
+ return {
+ command: "Runtime.getProperties", params: {objectId: id, ownProperties: true}, callback: callbackProperties5
+ };
+ }
+ function callbackProperties5(result) {
+ logGetPropertiesResult("Object(5)", result);
+ return { callback: callbackStartArray };
+ }
+
+
+ // 'Array' section -- check properties of an array.
+
+ function callbackStartArray() {
+ var _expression_ = "['red', 'green', 'blue']";
+ return { command: "Runtime.evaluate", params: {_expression_: _expression_}, callback: callbackEvalArray };
+ }
+ function callbackEvalArray(result) {
+ var id = result.result.objectId;
+ if (id === undefined)
+ throw new Error("objectId is expected");
+ return {
+ command: "Runtime.getProperties", params: {objectId: id, ownProperties: true}, callback: callbackPropertiesArray
+ };
+ }
+ function callbackPropertiesArray(result) {
+ logGetPropertiesResult("array", result);
+ return { callback: callbackStartBound };
+ }
+
+
+ // 'Bound' section -- check properties of a bound function (has a bunch of internal properties).
+
+ function callbackStartBound() {
+ var _expression_ = "Number.bind({}, 5)";
+ return { command: "Runtime.evaluate", params: {_expression_: _expression_}, callback: callbackEvalBound };
+ }
+ function callbackEvalBound(result) {
+ var id = result.result.objectId;
+ if (id === undefined)
+ throw new Error("objectId is expected");
+ return {
+ command: "Runtime.getProperties", params: {objectId: id, ownProperties: true}, callback: callbackPropertiesBound
+ };
+ }
+ function callbackPropertiesBound(result) {
+ logGetPropertiesResult("Bound function", result);
+ return; // End of test
+ }
+
+
+ // A helper function that dumps object properties and internal properties in sorted order.
+ function logGetPropertiesResult(title, protocolResult) {
+ InspectorTest.log("Properties of " + title);
+ var propertyArray = protocolResult.result;
+ propertyArray.sort(NamedThingComparator);
+ for (var i = 0; i < propertyArray.length; i++) {
+ var p = propertyArray[i];
+ var v = p.value;
+ if (v)
+ InspectorTest.log(" " + p.name + " " + v.type + " " + v.value);
+ else
+ InspectorTest.log(" " + p.name);
+ }
+ var internalPropertyArray = protocolResult.internalProperties;
+ if (internalPropertyArray) {
+ InspectorTest.log("Internal properties");
+ internalPropertyArray.sort(NamedThingComparator);
+ for (var i = 0; i < internalPropertyArray.length; i++) {
+ var p = internalPropertyArray[i];
+ var v = p.value;
+ InspectorTest.log(" " + p.name + " " + v.type + " " + v.value);
+ }
+ }
+
+ function NamedThingComparator(o1, o2) {
+ return o1.name.localeCompare(o2.name);
+ }
+ }
+}
+</script>
+</head>
+<body _onLoad_="runTest();">
+</body>
+</html>
Added: trunk/LayoutTests/platform/chromium/inspector-protocol/runtime-getProperties-expected.txt (0 => 130398)
--- trunk/LayoutTests/platform/chromium/inspector-protocol/runtime-getProperties-expected.txt (rev 0)
+++ trunk/LayoutTests/platform/chromium/inspector-protocol/runtime-getProperties-expected.txt 2012-10-04 16:12:42 UTC (rev 130398)
@@ -0,0 +1,22 @@
+Properties of Object(5)
+ __proto__ object undefined
+ foo string cat
+Internal properties
+ [[PrimitiveValue]] number 5
+Properties of array
+ 0 string red
+ 1 string green
+ 2 string blue
+ __proto__ object undefined
+ length number 3
+Properties of Bound function
+ __proto__ function undefined
+ arguments
+ caller
+ length number 0
+ name string
+Internal properties
+ [[BoundArgs]] object undefined
+ [[BoundThis]] object undefined
+ [[TargetFunction]] function undefined
+
Modified: trunk/Source/WebCore/ChangeLog (130397 => 130398)
--- trunk/Source/WebCore/ChangeLog 2012-10-04 16:08:34 UTC (rev 130397)
+++ trunk/Source/WebCore/ChangeLog 2012-10-04 16:12:42 UTC (rev 130398)
@@ -1,3 +1,41 @@
+2012-10-04 Peter Rybin <[email protected]>
+
+ Web Inspector: expose object internal properties such as PrimitiveValue or BoundThis
+ https://bugs.webkit.org/show_bug.cgi?id=94397
+
+ Reviewed by Yury Semikhatsky.
+
+ Internal property access is built from Injected Script to V8 debug API. JSC binding
+ has a stub imlpementation. Protocol is updated to explicitly reflect internal properties.
+
+ Test: inspector-protocol/runtime-getProperties.html
+
+ * bindings/js/JSInjectedScriptHostCustom.cpp:
+ (WebCore::JSInjectedScriptHost::getInternalProperties):
+ (WebCore):
+ * bindings/v8/DebuggerScript.js:
+ * bindings/v8/ScriptDebugServer.cpp:
+ (WebCore::ScriptDebugServer::getInternalProperties):
+ (WebCore):
+ * bindings/v8/ScriptDebugServer.h:
+ (ScriptDebugServer):
+ * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
+ (WebCore::V8InjectedScriptHost::getInternalPropertiesCallback):
+ (WebCore):
+ * inspector/InjectedScript.cpp:
+ (WebCore::InjectedScript::getInternalProperties):
+ (WebCore):
+ * inspector/InjectedScript.h:
+ (InjectedScript):
+ * inspector/InjectedScriptHost.idl:
+ * inspector/InjectedScriptSource.js:
+ (.):
+ * inspector/Inspector.json:
+ * inspector/InspectorRuntimeAgent.cpp:
+ (WebCore::InspectorRuntimeAgent::getProperties):
+ * inspector/InspectorRuntimeAgent.h:
+ (InspectorRuntimeAgent):
+
2012-10-04 Sami Kyostila <[email protected]>
Fixed position visibility check does not consider descendants
Modified: trunk/Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp (130397 => 130398)
--- trunk/Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp 2012-10-04 16:08:34 UTC (rev 130397)
+++ trunk/Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp 2012-10-04 16:12:42 UTC (rev 130398)
@@ -189,6 +189,12 @@
return result;
}
+JSValue JSInjectedScriptHost::getInternalProperties(ExecState*)
+{
+ // FIXME: implement this. https://bugs.webkit.org/show_bug.cgi?id=94533
+ return jsUndefined();
+}
+
static JSArray* getJSListenerFunctions(ExecState* exec, Document* document, const EventListenerInfo& listenerInfo)
{
JSArray* result = constructEmptyArray(exec);
Modified: trunk/Source/WebCore/bindings/v8/DebuggerScript.js (130397 => 130398)
--- trunk/Source/WebCore/bindings/v8/DebuggerScript.js 2012-10-04 16:08:34 UTC (rev 130397)
+++ trunk/Source/WebCore/bindings/v8/DebuggerScript.js 2012-10-04 16:12:42 UTC (rev 130398)
@@ -79,6 +79,20 @@
return result;
}
+DebuggerScript.getInternalProperties = function(value)
+{
+ var properties = ObjectMirror.GetInternalProperties(value);
+ var result = [];
+ for (var i = 0; i < properties.length; i++) {
+ var mirror = properties[i];
+ result.push({
+ name: mirror.name(),
+ value: mirror.value().value()
+ });
+ }
+ return result;
+}
+
DebuggerScript.getScripts = function(contextData)
{
var result = [];
Modified: trunk/Source/WebCore/bindings/v8/ScriptDebugServer.cpp (130397 => 130398)
--- trunk/Source/WebCore/bindings/v8/ScriptDebugServer.cpp 2012-10-04 16:08:34 UTC (rev 130397)
+++ trunk/Source/WebCore/bindings/v8/ScriptDebugServer.cpp 2012-10-04 16:12:42 UTC (rev 130398)
@@ -412,6 +412,16 @@
return callDebuggerMethod("getFunctionScopes", 1, argv);
}
+v8::Local<v8::Value> ScriptDebugServer::getInternalProperties(v8::Handle<v8::Object>& object)
+{
+ if (m_debuggerScript.get().IsEmpty())
+ return *v8::Undefined();
+
+ v8::Handle<v8::Value> argv[] = { object };
+ return callDebuggerMethod("getInternalProperties", 1, argv);
+}
+
+
bool ScriptDebugServer::isPaused()
{
return !m_executionState.get().IsEmpty();
Modified: trunk/Source/WebCore/bindings/v8/ScriptDebugServer.h (130397 => 130398)
--- trunk/Source/WebCore/bindings/v8/ScriptDebugServer.h 2012-10-04 16:08:34 UTC (rev 130397)
+++ trunk/Source/WebCore/bindings/v8/ScriptDebugServer.h 2012-10-04 16:12:42 UTC (rev 130398)
@@ -97,6 +97,7 @@
bool isPaused();
v8::Local<v8::Value> functionScopes(v8::Handle<v8::Function>);
+ v8::Local<v8::Value> getInternalProperties(v8::Handle<v8::Object>&);
virtual void compileScript(ScriptState*, const String& _expression_, const String& sourceURL, String* scriptId, String* exceptionMessage);
virtual void clearCompiledScripts();
Modified: trunk/Source/WebCore/bindings/v8/custom/V8InjectedScriptHostCustom.cpp (130397 => 130398)
--- trunk/Source/WebCore/bindings/v8/custom/V8InjectedScriptHostCustom.cpp 2012-10-04 16:08:34 UTC (rev 130397)
+++ trunk/Source/WebCore/bindings/v8/custom/V8InjectedScriptHostCustom.cpp 2012-10-04 16:12:42 UTC (rev 130398)
@@ -192,6 +192,21 @@
return result;
}
+v8::Handle<v8::Value> V8InjectedScriptHost::getInternalPropertiesCallback(const v8::Arguments& args)
+{
+ INC_STATS("InjectedScriptHost.getInternalProperties()");
+ if (args.Length() < 1)
+ return v8::Undefined();
+
+ v8::HandleScope handleScope;
+
+ v8::Handle<v8::Object> object = v8::Handle<v8::Object>::Cast(args[0]);
+
+ InjectedScriptHost* host = V8InjectedScriptHost::toNative(args.Holder());
+ ScriptDebugServer& debugServer = host->scriptDebugServer();
+ return debugServer.getInternalProperties(object);
+}
+
static v8::Handle<v8::Array> getJSListenerFunctions(Document* document, const EventListenerInfo& listenerInfo)
{
v8::Local<v8::Array> result = v8::Array::New();
Modified: trunk/Source/WebCore/inspector/CodeGeneratorInspector.py (130397 => 130398)
--- trunk/Source/WebCore/inspector/CodeGeneratorInspector.py 2012-10-04 16:08:34 UTC (rev 130397)
+++ trunk/Source/WebCore/inspector/CodeGeneratorInspector.py 2012-10-04 16:12:42 UTC (rev 130398)
@@ -56,7 +56,7 @@
}
-TYPES_WITH_RUNTIME_CAST_SET = frozenset(["Runtime.RemoteObject", "Runtime.PropertyDescriptor",
+TYPES_WITH_RUNTIME_CAST_SET = frozenset(["Runtime.RemoteObject", "Runtime.PropertyDescriptor", "Runtime.InternalPropertyDescriptor",
"Debugger.FunctionDetails", "Debugger.CallFrame", "Canvas.TraceLog",
# This should be a temporary hack. TimelineEvent should be created via generated C++ API.
"Timeline.TimelineEvent"])
Modified: trunk/Source/WebCore/inspector/InjectedScript.cpp (130397 => 130398)
--- trunk/Source/WebCore/inspector/InjectedScript.cpp 2012-10-04 16:08:34 UTC (rev 130397)
+++ trunk/Source/WebCore/inspector/InjectedScript.cpp 2012-10-04 16:12:42 UTC (rev 130398)
@@ -45,6 +45,7 @@
using WebCore::TypeBuilder::Array;
using WebCore::TypeBuilder::Debugger::CallFrame;
using WebCore::TypeBuilder::Runtime::PropertyDescriptor;
+using WebCore::TypeBuilder::Runtime::InternalPropertyDescriptor;
using WebCore::TypeBuilder::Debugger::FunctionDetails;
using WebCore::TypeBuilder::Runtime::RemoteObject;
@@ -141,6 +142,22 @@
*properties = Array<PropertyDescriptor>::runtimeCast(result);
}
+void InjectedScript::getInternalProperties(ErrorString* errorString, const String& objectId, RefPtr<Array<InternalPropertyDescriptor> >* properties)
+{
+ ScriptFunctionCall function(injectedScriptObject(), "getInternalProperties");
+ function.appendArgument(objectId);
+
+ RefPtr<InspectorValue> result;
+ makeCall(function, &result);
+ if (!result || result->type() != InspectorValue::TypeArray) {
+ *errorString = "Internal error";
+ return;
+ }
+ RefPtr<Array<InternalPropertyDescriptor> > array = Array<InternalPropertyDescriptor>::runtimeCast(result);
+ if (array->length() > 0)
+ *properties = array;
+}
+
Node* InjectedScript::nodeForObjectId(const String& objectId)
{
if (hasNoValue() || !canAccessInspectedWindow())
Modified: trunk/Source/WebCore/inspector/InjectedScript.h (130397 => 130398)
--- trunk/Source/WebCore/inspector/InjectedScript.h 2012-10-04 16:08:34 UTC (rev 130397)
+++ trunk/Source/WebCore/inspector/InjectedScript.h 2012-10-04 16:12:42 UTC (rev 130398)
@@ -79,6 +79,7 @@
void restartFrame(ErrorString*, const ScriptValue& callFrames, const String& callFrameId, RefPtr<InspectorObject>* result);
void getFunctionDetails(ErrorString*, const String& functionId, RefPtr<TypeBuilder::Debugger::FunctionDetails>* result);
void getProperties(ErrorString*, const String& objectId, bool ownProperties, RefPtr<TypeBuilder::Array<TypeBuilder::Runtime::PropertyDescriptor> >* result);
+ void getInternalProperties(ErrorString*, const String& objectId, RefPtr<TypeBuilder::Array<TypeBuilder::Runtime::InternalPropertyDescriptor> >* result);
Node* nodeForObjectId(const String& objectId);
void releaseObject(const String& objectId);
Modified: trunk/Source/WebCore/inspector/InjectedScriptHost.idl (130397 => 130398)
--- trunk/Source/WebCore/inspector/InjectedScriptHost.idl 2012-10-04 16:08:34 UTC (rev 130397)
+++ trunk/Source/WebCore/inspector/InjectedScriptHost.idl 2012-10-04 16:12:42 UTC (rev 130398)
@@ -43,6 +43,7 @@
[Custom] boolean isHTMLAllCollection(in DOMObject object);
[Custom] DOMString type(in DOMObject object);
[Custom] DOMObject functionDetails(in DOMObject object);
+ [Custom] Array getInternalProperties(in DOMObject object);
[Custom] Array getEventListeners(in Node node);
[Custom] DOMString databaseId(in DOMObject database);
Modified: trunk/Source/WebCore/inspector/InjectedScriptSource.js (130397 => 130398)
--- trunk/Source/WebCore/inspector/InjectedScriptSource.js 2012-10-04 16:08:34 UTC (rev 130397)
+++ trunk/Source/WebCore/inspector/InjectedScriptSource.js 2012-10-04 16:12:42 UTC (rev 130398)
@@ -234,12 +234,37 @@
descriptor.configurable = false;
if (!("enumerable" in descriptor))
descriptor.enumerable = false;
-
}
return descriptors;
},
/**
+ * @param {string} objectId
+ * @return {Array.<Object>|boolean}
+ */
+ getInternalProperties: function(objectId, ownProperties)
+ {
+ var parsedObjectId = this._parseObjectId(objectId);
+ var object = this._objectForId(parsedObjectId);
+ var objectGroupName = this._idToObjectGroupName[parsedObjectId.id];
+ if (!this._isDefined(object))
+ return false;
+ var descriptors = [];
+ var internalProperties = InjectedScriptHost.getInternalProperties(object);
+ if (internalProperties) {
+ for (var i = 0; i < internalProperties.length; i++) {
+ var property = internalProperties[i];
+ var descriptor = {
+ name: property.name,
+ value: this._wrapObject(property.value, objectGroupName)
+ };
+ descriptors.push(descriptor);
+ }
+ }
+ return descriptors;
+ },
+
+ /**
* @param {string} functionId
* @return {Object|string}
*/
Modified: trunk/Source/WebCore/inspector/Inspector.json (130397 => 130398)
--- trunk/Source/WebCore/inspector/Inspector.json 2012-10-04 16:08:34 UTC (rev 130397)
+++ trunk/Source/WebCore/inspector/Inspector.json 2012-10-04 16:12:42 UTC (rev 130398)
@@ -498,6 +498,15 @@
]
},
{
+ "id": "InternalPropertyDescriptor",
+ "type": "object",
+ "description": "Object internal property descriptor. This property isn't normally visible in _javascript_ code.",
+ "properties": [
+ { "name": "name", "type": "string", "description": "Conventional property name." },
+ { "name": "value", "$ref": "RemoteObject", "optional": true, "description": "The value associated with the property." }
+ ]
+ },
+ {
"id": "CallArgument",
"type": "object",
"description": "Represents function call argument. Either remote object id <code>objectId</code> or primitive <code>value</code> or neither of (for undefined) them should be specified.",
@@ -565,7 +574,8 @@
{ "name": "ownProperties", "optional": true, "type": "boolean", "description": "If true, returns properties belonging only to the element itself, not to its prototype chain." }
],
"returns": [
- { "name": "result", "type": "array", "items": { "$ref": "PropertyDescriptor"}, "description": "Object properties." }
+ { "name": "result", "type": "array", "items": { "$ref": "PropertyDescriptor"}, "description": "Object properties." },
+ { "name": "internalProperties", "optional": true, "type": "array", "items": { "$ref": "InternalPropertyDescriptor"}, "description": "Internal object properties." }
],
"description": "Returns properties of a given object. Object group of the result is inherited from the target object."
},
Modified: trunk/Source/WebCore/inspector/InspectorRuntimeAgent.cpp (130397 => 130398)
--- trunk/Source/WebCore/inspector/InspectorRuntimeAgent.cpp 2012-10-04 16:08:34 UTC (rev 130397)
+++ trunk/Source/WebCore/inspector/InspectorRuntimeAgent.cpp 2012-10-04 16:12:42 UTC (rev 130398)
@@ -136,7 +136,7 @@
}
}
-void InspectorRuntimeAgent::getProperties(ErrorString* errorString, const String& objectId, const bool* const ownProperties, RefPtr<TypeBuilder::Array<TypeBuilder::Runtime::PropertyDescriptor> >& result)
+void InspectorRuntimeAgent::getProperties(ErrorString* errorString, const String& objectId, const bool* const ownProperties, RefPtr<TypeBuilder::Array<TypeBuilder::Runtime::PropertyDescriptor> >& result, RefPtr<TypeBuilder::Array<TypeBuilder::Runtime::InternalPropertyDescriptor> >& internalProperties)
{
InjectedScript injectedScript = m_injectedScriptManager->injectedScriptForObjectId(objectId);
if (injectedScript.hasNoValue()) {
@@ -150,6 +150,7 @@
muteConsole();
injectedScript.getProperties(errorString, objectId, ownProperties ? *ownProperties : false, &result);
+ injectedScript.getInternalProperties(errorString, objectId, &internalProperties);
unmuteConsole();
#if ENABLE(_javascript__DEBUGGER)
Modified: trunk/Source/WebCore/inspector/InspectorRuntimeAgent.h (130397 => 130398)
--- trunk/Source/WebCore/inspector/InspectorRuntimeAgent.h 2012-10-04 16:08:34 UTC (rev 130397)
+++ trunk/Source/WebCore/inspector/InspectorRuntimeAgent.h 2012-10-04 16:12:42 UTC (rev 130398)
@@ -79,7 +79,7 @@
RefPtr<TypeBuilder::Runtime::RemoteObject>& result,
TypeBuilder::OptOutput<bool>* wasThrown);
virtual void releaseObject(ErrorString*, const String& objectId);
- virtual void getProperties(ErrorString*, const String& objectId, const bool* ownProperties, RefPtr<TypeBuilder::Array<TypeBuilder::Runtime::PropertyDescriptor> >& result);
+ virtual void getProperties(ErrorString*, const String& objectId, const bool* ownProperties, RefPtr<TypeBuilder::Array<TypeBuilder::Runtime::PropertyDescriptor> >& result, RefPtr<TypeBuilder::Array<TypeBuilder::Runtime::InternalPropertyDescriptor> >& internalProperties);
virtual void releaseObjectGroup(ErrorString*, const String& objectGroup);
virtual void run(ErrorString*);