Title: [130398] trunk
Revision
130398
Author
[email protected]
Date
2012-10-04 09:12:42 -0700 (Thu, 04 Oct 2012)

Log Message

Web Inspector: expose object internal properties such as PrimitiveValue or BoundThis
https://bugs.webkit.org/show_bug.cgi?id=94397

Patch by Peter Rybin <[email protected]> on 2012-10-04
Reviewed by Yury Semikhatsky.

Source/WebCore:

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):

LayoutTests:

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:

Modified Paths

Added Paths

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*);
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to