Web Inspector: CodeGeneratorInspector.py: switch Inspector, Memory and Database domains to typed API
https://bugs.webkit.org/show_bug.cgi?id=82958

Patch by Peter Rybin <peter.rybin@gmail.com> on 2012-04-02
Reviewed by Yury Semikhatsky.

Client code is switched to typed API (all InspectorObject and InspectorArray types are replaced with
generated types from TypeBuilder according to Inspector.json).

Missing array of InspectorValues specialization is added.

* inspector/CodeGeneratorInspector.py:
* inspector/InjectedScriptHost.cpp:
(WebCore::InjectedScriptHost::inspectImpl):
* inspector/InspectorAgent.cpp:
(WebCore::InspectorAgent::inspect):
* inspector/InspectorAgent.h:
(InspectorAgent):
* inspector/InspectorDatabaseAgent.cpp:
(WebCore):
(WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
* inspector/InspectorDatabaseAgent.h:
(InspectorDatabaseAgent):
* inspector/InspectorDatabaseResource.cpp:
(WebCore::InspectorDatabaseResource::bind):
* inspector/InspectorMemoryAgent.cpp:
(WebCore::InspectorMemoryAgent::getDOMNodeCount):
* inspector/InspectorMemoryAgent.h:
(InspectorMemoryAgent):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@113157 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index aaf6528..9a896f8 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,34 @@
+2012-04-02  Peter Rybin  <peter.rybin@gmail.com>
+
+        Web Inspector: CodeGeneratorInspector.py: switch Inspector, Memory and Database domains to typed API
+        https://bugs.webkit.org/show_bug.cgi?id=82958
+
+        Reviewed by Yury Semikhatsky.
+
+        Client code is switched to typed API (all InspectorObject and InspectorArray types are replaced with
+        generated types from TypeBuilder according to Inspector.json).
+
+        Missing array of InspectorValues specialization is added.
+
+        * inspector/CodeGeneratorInspector.py:
+        * inspector/InjectedScriptHost.cpp:
+        (WebCore::InjectedScriptHost::inspectImpl):
+        * inspector/InspectorAgent.cpp:
+        (WebCore::InspectorAgent::inspect):
+        * inspector/InspectorAgent.h:
+        (InspectorAgent):
+        * inspector/InspectorDatabaseAgent.cpp:
+        (WebCore):
+        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
+        * inspector/InspectorDatabaseAgent.h:
+        (InspectorDatabaseAgent):
+        * inspector/InspectorDatabaseResource.cpp:
+        (WebCore::InspectorDatabaseResource::bind):
+        * inspector/InspectorMemoryAgent.cpp:
+        (WebCore::InspectorMemoryAgent::getDOMNodeCount):
+        * inspector/InspectorMemoryAgent.h:
+        (InspectorMemoryAgent):
+
 2012-04-04  Andrey Kosyakov  <caseq@chromium.org>
 
         Web Inspector: make padding and client window width part of timeline calculator's state
diff --git a/Source/WebCore/inspector/CodeGeneratorInspector.py b/Source/WebCore/inspector/CodeGeneratorInspector.py
index 0eae947..557358e 100755
--- a/Source/WebCore/inspector/CodeGeneratorInspector.py
+++ b/Source/WebCore/inspector/CodeGeneratorInspector.py
@@ -60,7 +60,8 @@
                                          "Debugger.FunctionDetails", "Debugger.CallFrame"])
 
 STRICT_ENABLED_DOMAINS = ["Console", "DOMDebugger",
-                          "CSS", "Debugger", "DOM", "Network", "Page", "Runtime"]
+                          "CSS", "Debugger", "DOM", "Network", "Page", "Runtime",
+                          "Inspector", "Memory", "Database"]
 
 
 cmdline_parser = optparse.OptionParser()
@@ -2277,14 +2278,12 @@
     };
 };
 
-
-
 template<>
-struct ArrayItemHelper<InspectorObject> {
+struct ArrayItemHelper<InspectorValue> {
     struct Traits {
-        static void pushRefPtr(InspectorArray* array, PassRefPtr<InspectorObject> value)
+        static void pushRefPtr(InspectorArray* array, PassRefPtr<InspectorValue> value)
         {
-            array->pushObject(value);
+            array->pushValue(value);
         }
     };
 };
diff --git a/Source/WebCore/inspector/InjectedScriptHost.cpp b/Source/WebCore/inspector/InjectedScriptHost.cpp
index cee3c94..0b68468 100644
--- a/Source/WebCore/inspector/InjectedScriptHost.cpp
+++ b/Source/WebCore/inspector/InjectedScriptHost.cpp
@@ -98,8 +98,10 @@
 
 void InjectedScriptHost::inspectImpl(PassRefPtr<InspectorValue> object, PassRefPtr<InspectorValue> hints)
 {
-    if (m_inspectorAgent)
-        m_inspectorAgent->inspect(object->asObject(), hints->asObject());
+    if (m_inspectorAgent) {
+        RefPtr<TypeBuilder::Runtime::RemoteObject> remoteObject = TypeBuilder::Runtime::RemoteObject::runtimeCast(object);
+        m_inspectorAgent->inspect(remoteObject, hints->asObject());
+    }
 }
 
 void InjectedScriptHost::getEventListenersImpl(Node* node, Vector<EventListenerInfo>& listenersArray)
diff --git a/Source/WebCore/inspector/InspectorAgent.cpp b/Source/WebCore/inspector/InspectorAgent.cpp
index 1237be0..ba7a733 100644
--- a/Source/WebCore/inspector/InspectorAgent.cpp
+++ b/Source/WebCore/inspector/InspectorAgent.cpp
@@ -202,7 +202,7 @@
     m_injectedScriptForOrigin.set(origin, source);
 }
 
-void InspectorAgent::inspect(PassRefPtr<InspectorObject> objectToInspect, PassRefPtr<InspectorObject> hints)
+void InspectorAgent::inspect(PassRefPtr<TypeBuilder::Runtime::RemoteObject> objectToInspect, PassRefPtr<InspectorObject> hints)
 {
     if (m_state->getBoolean(InspectorAgentState::inspectorAgentEnabled) && m_frontend) {
         m_frontend->inspector()->inspect(objectToInspect, hints);
diff --git a/Source/WebCore/inspector/InspectorAgent.h b/Source/WebCore/inspector/InspectorAgent.h
index 5c2861c..49e79fa0 100644
--- a/Source/WebCore/inspector/InspectorAgent.h
+++ b/Source/WebCore/inspector/InspectorAgent.h
@@ -94,7 +94,7 @@
 
     void setInjectedScriptForOrigin(const String& origin, const String& source);
 
-    void inspect(PassRefPtr<InspectorObject> objectToInspect, PassRefPtr<InspectorObject> hints);
+    void inspect(PassRefPtr<TypeBuilder::Runtime::RemoteObject> objectToInspect, PassRefPtr<InspectorObject> hints);
 
 private:
     InspectorAgent(Page*, InjectedScriptManager*, InstrumentingAgents*, InspectorState*);
@@ -112,7 +112,7 @@
     InjectedScriptManager* m_injectedScriptManager;
 
     Vector<pair<long, String> > m_pendingEvaluateTestCommands;
-    pair<RefPtr<InspectorObject>, RefPtr<InspectorObject> > m_pendingInspectData;
+    pair<RefPtr<TypeBuilder::Runtime::RemoteObject>, RefPtr<InspectorObject> > m_pendingInspectData;
     typedef HashMap<String, String> InjectedScriptForOriginMap;
     InjectedScriptForOriginMap m_injectedScriptForOrigin;
 #if ENABLE(WORKERS)
diff --git a/Source/WebCore/inspector/InspectorDatabaseAgent.cpp b/Source/WebCore/inspector/InspectorDatabaseAgent.cpp
index e746b18..e8f5d4a 100644
--- a/Source/WebCore/inspector/InspectorDatabaseAgent.cpp
+++ b/Source/WebCore/inspector/InspectorDatabaseAgent.cpp
@@ -103,19 +103,19 @@
 
         SQLResultSetRowList* rowList = resultSet->rows();
 
-        RefPtr<InspectorArray> columnNames = InspectorArray::create();
+        RefPtr<TypeBuilder::Array<String> > columnNames = TypeBuilder::Array<String>::create();
         const Vector<String>& columns = rowList->columnNames();
         for (size_t i = 0; i < columns.size(); ++i)
-            columnNames->pushString(columns[i]);
+            columnNames->addItem(columns[i]);
 
-        RefPtr<InspectorArray> values = InspectorArray::create();
+        RefPtr<TypeBuilder::Array<InspectorValue> > values = TypeBuilder::Array<InspectorValue>::create();
         const Vector<SQLValue>& data = rowList->values();
         for (size_t i = 0; i < data.size(); ++i) {
             const SQLValue& value = rowList->values()[i];
             switch (value.type()) {
-                case SQLValue::StringValue: values->pushString(value.string()); break;
-                case SQLValue::NumberValue: values->pushNumber(value.number()); break;
-                case SQLValue::NullValue: values->pushValue(InspectorValue::null()); break;
+            case SQLValue::StringValue: values->addItem(InspectorString::create(value.string())); break;
+            case SQLValue::NumberValue: values->addItem(InspectorBasicValue::create(value.number())); break;
+            case SQLValue::NullValue: values->addItem(InspectorValue::null()); break;
             }
         }
         m_frontendProvider->frontend()->sqlTransactionSucceeded(m_transactionId, columnNames, values);
@@ -291,19 +291,21 @@
     m_enabled =  m_state->getBoolean(DatabaseAgentState::databaseAgentEnabled);
 }
 
-void InspectorDatabaseAgent::getDatabaseTableNames(ErrorString* error, const String& databaseId, RefPtr<InspectorArray>& names)
+void InspectorDatabaseAgent::getDatabaseTableNames(ErrorString* error, const String& databaseId, RefPtr<TypeBuilder::Array<String> >& names)
 {
     if (!m_enabled) {
         *error = "Database agent is not enabled";
         return;
     }
 
+    names = TypeBuilder::Array<String>::create();
+
     Database* database = databaseForId(databaseId);
     if (database) {
         Vector<String> tableNames = database->tableNames();
         unsigned length = tableNames.size();
         for (unsigned i = 0; i < length; ++i)
-            names->pushString(tableNames[i]);
+            names->addItem(tableNames[i]);
     }
 }
 
diff --git a/Source/WebCore/inspector/InspectorDatabaseAgent.h b/Source/WebCore/inspector/InspectorDatabaseAgent.h
index fc76e1b..2902c6e 100644
--- a/Source/WebCore/inspector/InspectorDatabaseAgent.h
+++ b/Source/WebCore/inspector/InspectorDatabaseAgent.h
@@ -66,7 +66,7 @@
     // Called from the front-end.
     virtual void enable(ErrorString*);
     virtual void disable(ErrorString*);
-    virtual void getDatabaseTableNames(ErrorString*, const String& databaseId, RefPtr<InspectorArray>& names);
+    virtual void getDatabaseTableNames(ErrorString*, const String& databaseId, RefPtr<TypeBuilder::Array<String> >& names);
     virtual void executeSQL(ErrorString*, const String& databaseId, const String& query, bool* success, int* transactionId);
 
     // Called from the injected script.
diff --git a/Source/WebCore/inspector/InspectorDatabaseResource.cpp b/Source/WebCore/inspector/InspectorDatabaseResource.cpp
index 678541c..0f46538 100644
--- a/Source/WebCore/inspector/InspectorDatabaseResource.cpp
+++ b/Source/WebCore/inspector/InspectorDatabaseResource.cpp
@@ -58,11 +58,11 @@
 
 void InspectorDatabaseResource::bind(InspectorFrontend::Database* frontend)
 {
-    RefPtr<InspectorObject> jsonObject = InspectorObject::create();
-    jsonObject->setString("id", m_id);
-    jsonObject->setString("domain", m_domain);
-    jsonObject->setString("name", m_name);
-    jsonObject->setString("version", m_version);
+    RefPtr<TypeBuilder::Database::Database> jsonObject = TypeBuilder::Database::Database::create()
+        .setId(m_id)
+        .setDomain(m_domain)
+        .setName(m_name)
+        .setVersion(m_version);
     frontend->addDatabase(jsonObject);
 }
 
diff --git a/Source/WebCore/inspector/InspectorMemoryAgent.cpp b/Source/WebCore/inspector/InspectorMemoryAgent.cpp
index 5e43cb9..c9fe82d 100644
--- a/Source/WebCore/inspector/InspectorMemoryAgent.cpp
+++ b/Source/WebCore/inspector/InspectorMemoryAgent.cpp
@@ -198,13 +198,13 @@
 public:
     CounterVisitor(Page* page)
         : m_page(page)
-        , m_domGroups(InspectorArray::create())
+        , m_domGroups(TypeBuilder::Array<TypeBuilder::Memory::DOMGroup>::create())
         , m_jsExternalStringSize(0)
         , m_sharedStringSize(0) { }
 
-    InspectorArray* domGroups() { return m_domGroups.get(); }
+    TypeBuilder::Array<TypeBuilder::Memory::DOMGroup>* domGroups() { return m_domGroups.get(); }
 
-    PassRefPtr<InspectorObject> strings()
+    PassRefPtr<StringStatistics> strings()
     {
         RefPtr<StringStatistics> stringStatistics = StringStatistics::create()
             .setDom(m_characterDataStatistics.characterDataSize())
@@ -236,7 +236,7 @@
         if (rootNode->nodeType() == Node::DOCUMENT_NODE)
             domGroup->setDocumentURI(static_cast<Document*>(rootNode)->documentURI());
 
-        m_domGroups->pushObject(domGroup);
+        m_domGroups->addItem(domGroup);
     }
 
     virtual void visitJSExternalString(StringImpl* string)
@@ -278,7 +278,7 @@
 
     HashSet<Node*> m_roots;
     Page* m_page;
-    RefPtr<InspectorArray> m_domGroups;
+    RefPtr<TypeBuilder::Array<TypeBuilder::Memory::DOMGroup> > m_domGroups;
     CharacterDataStatistics m_characterDataStatistics;
     int m_jsExternalStringSize;
     int m_sharedStringSize;
@@ -290,7 +290,7 @@
 {
 }
 
-void InspectorMemoryAgent::getDOMNodeCount(ErrorString*, RefPtr<InspectorArray>& domGroups, RefPtr<InspectorObject>& strings)
+void InspectorMemoryAgent::getDOMNodeCount(ErrorString*, RefPtr<TypeBuilder::Array<TypeBuilder::Memory::DOMGroup> >& domGroups, RefPtr<TypeBuilder::Memory::StringStatistics>& strings)
 {
     CounterVisitor counterVisitor(m_page);
     ScriptProfiler::visitJSDOMWrappers(&counterVisitor);
diff --git a/Source/WebCore/inspector/InspectorMemoryAgent.h b/Source/WebCore/inspector/InspectorMemoryAgent.h
index 320abd9..7f9a852 100644
--- a/Source/WebCore/inspector/InspectorMemoryAgent.h
+++ b/Source/WebCore/inspector/InspectorMemoryAgent.h
@@ -57,7 +57,7 @@
         return adoptPtr(new InspectorMemoryAgent(instrumentingAgents, state, page, domAgent));
     }
 
-    void getDOMNodeCount(ErrorString*, RefPtr<InspectorArray>& domGroups, RefPtr<InspectorObject>& strings);
+    void getDOMNodeCount(ErrorString*, RefPtr<TypeBuilder::Array<TypeBuilder::Memory::DOMGroup> >& domGroups, RefPtr<TypeBuilder::Memory::StringStatistics>& strings);
 
     ~InspectorMemoryAgent();