QV8DebugService: Return JSON messages for internal requests.
authorAurindam Jana <aurindam.jana@nokia.com>
Fri, 4 Nov 2011 13:04:56 +0000 (14:04 +0100)
committerQt by Nokia <qt-info@nokia.com>
Mon, 7 Nov 2011 09:44:47 +0000 (10:44 +0100)
Internal requests are not handles by V8. Hence, create a JSON
message similar to v8 debugging protocol and send it to client.
This is only for uniformity wrt to debug requests.

Change-Id: Ia0a3cda0ef157b852fb4402fde62b4651a95bd56
Reviewed-by: Kai Koehne <kai.koehne@nokia.com>

src/declarative/debugger/qv8debugservice.cpp

index e4d6960..2f7ca34 100644 (file)
@@ -265,9 +265,65 @@ void QV8DebugService::messageReceived(const QByteArray &message)
 
         if (debugCommand == QLatin1String("connect")) {
             d->initialized = true;
+            //Prepare the response string
+            //Create a json message using v8 debugging protocol
+            //and send it to client
+
+            // { "type"        : "response",
+            //   "request_seq" : <number>,
+            //   "command"     : "connect",
+            //   "running"     : <is the VM running after sending this response>
+            //   "success"     : true
+            // }
+            {
+                v8::Isolate::Scope i_scope(d->isolate);
+                const QString obj(QLatin1String("{}"));
+                QJSValue parser = d->engine->evaluate(QLatin1String("JSON.parse"));
+                QJSValue jsonVal = parser.call(QJSValue(), QJSValueList() << obj);
+                jsonVal.setProperty(QLatin1String("type"), QJSValue(QLatin1String("response")));
+
+                const int sequence = reqMap.value(QLatin1String("seq")).toInt();
+                jsonVal.setProperty(QLatin1String("request_seq"), QJSValue(sequence));
+                jsonVal.setProperty(QLatin1String("command"), QJSValue(debugCommand));
+                jsonVal.setProperty(QLatin1String("success"), QJSValue(true));
+                jsonVal.setProperty(QLatin1String("running"), QJSValue(!d->loop.isRunning()));
+
+                QJSValue stringify = d->engine->evaluate(QLatin1String("JSON.stringify"));
+                QJSValue json = stringify.call(QJSValue(), QJSValueList() << jsonVal);
+                debugMessageHandler(json.toString());
+
+            }
 
         } else if (debugCommand == QLatin1String("interrupt")) {
             v8::Debug::DebugBreak();
+            //Prepare the response string
+            //Create a json message using v8 debugging protocol
+            //and send it to client
+
+            // { "type"        : "response",
+            //   "request_seq" : <number>,
+            //   "command"     : "connect",
+            //   "running"     : <is the VM running after sending this response>
+            //   "success"     : true
+            // }
+            {
+                v8::Isolate::Scope i_scope(d->isolate);
+                const QString obj(QLatin1String("{}"));
+                QJSValue parser = d->engine->evaluate(QLatin1String("JSON.parse"));
+                QJSValue jsonVal = parser.call(QJSValue(), QJSValueList() << obj);
+                jsonVal.setProperty(QLatin1String("type"), QJSValue(QLatin1String("response")));
+
+                const int sequence = reqMap.value(QLatin1String("seq")).toInt();
+                jsonVal.setProperty(QLatin1String("request_seq"), QJSValue(sequence));
+                jsonVal.setProperty(QLatin1String("command"), QJSValue(debugCommand));
+                jsonVal.setProperty(QLatin1String("success"), QJSValue(true));
+                jsonVal.setProperty(QLatin1String("running"), QJSValue(!d->loop.isRunning()));
+
+                QJSValue stringify = d->engine->evaluate(QLatin1String("JSON.stringify"));
+                QJSValue json = stringify.call(QJSValue(), QJSValueList() << jsonVal);
+                debugMessageHandler(json.toString());
+
+            }
 
         } else {
             bool forwardRequestToV8 = true;