2011-04-12 Ilya Tikhonovsky <loislo@chromium.org>
authorloislo@chromium.org <loislo@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 12 Apr 2011 12:12:04 +0000 (12:12 +0000)
committerloislo@chromium.org <loislo@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 12 Apr 2011 12:12:04 +0000 (12:12 +0000)
        Reviewed by Yury Semikhatsky.

        Web Inspector: there was incorrect value of id property of responses for malformed json-rpc 2.0 requests.
        https://bugs.webkit.org/show_bug.cgi?id=58305

        It was 0 if the message is not a json object or it has no id property. But according to spec it must be null.

        * inspector/CodeGeneratorInspector.pm:

2011-04-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: there was incorrect value of id property of responses for malformed json-rpc 2.0 requests.
        https://bugs.webkit.org/show_bug.cgi?id=58305

        It was 0 if the message is not a json object or it has no id property. But according to spec it must be null.

        * inspector/report-protocol-errors-expected.txt:
        * inspector/report-protocol-errors.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@83580 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/inspector/report-protocol-errors-expected.txt
LayoutTests/inspector/report-protocol-errors.html
Source/WebCore/ChangeLog
Source/WebCore/inspector/CodeGeneratorInspector.pm

index 63e4a46..a9368a3 100644 (file)
@@ -1,3 +1,15 @@
+2011-04-12  Ilya Tikhonovsky  <loislo@chromium.org>
+
+        Reviewed by Yury Semikhatsky.
+
+        Web Inspector: there was incorrect value of id property of responses for malformed json-rpc 2.0 requests.
+        https://bugs.webkit.org/show_bug.cgi?id=58305
+
+        It was 0 if the message is not a json object or it has no id property. But according to spec it must be null.
+
+        * inspector/report-protocol-errors-expected.txt:
+        * inspector/report-protocol-errors.html:
+
 2011-04-12  Pavel Podivilov  <podivilov@chromium.org>
 
         Reviewed by Pavel Feldman.
index 7687349..0779232 100644 (file)
@@ -8,47 +8,47 @@ Tests that InspectorBackendDispatcher is catching incorrect messages.
             0 : "Message should be in JSON format."
         }
     }
-    id : 0
+    id : null
 }
 {
     error : {
         code : -32600
         message : "Invalid Request."
         data : {
-            0 : "Invalid message format. 'method' property wasn't found."
+            0 : "Invalid message format. 'id' property was not found in the request."
         }
     }
-    id : 0
+    id : null
 }
 {
     error : {
         code : -32600
         message : "Invalid Request."
         data : {
-            0 : "Invalid message format. The type of 'method' property should be string."
+            0 : "Invalid message format. The type of 'id' property should be number."
         }
     }
-    id : 0
+    id : null
 }
 {
     error : {
         code : -32600
         message : "Invalid Request."
         data : {
-            0 : "Invalid message format. 'id' property was not found in the request."
+            0 : "Invalid message format. The type of 'method' property should be string."
         }
     }
-    id : 0
+    id : 1
 }
 {
     error : {
-        code : -32600
-        message : "Invalid Request."
+        code : -32601
+        message : "Method not found."
         data : {
-            0 : "Invalid message format. The type of 'id' property should be number."
+            0 : "Invalid method name was received. 'resourceContent' wasn't found."
         }
     }
-    id : 0
+    id : 2
 }
 {
     error : {
@@ -58,7 +58,7 @@ Tests that InspectorBackendDispatcher is catching incorrect messages.
             0 : "Invalid method name was received. 'DOM.test' wasn't found."
         }
     }
-    id : 1
+    id : 3
 }
 {
     error : {
@@ -68,7 +68,7 @@ Tests that InspectorBackendDispatcher is catching incorrect messages.
             0 : "'params' property with type 'object' was not found."
         }
     }
-    id : 2
+    id : 4
 }
 {
     error : {
@@ -78,7 +78,7 @@ Tests that InspectorBackendDispatcher is catching incorrect messages.
             0 : "'params' property with type 'object' was not found."
         }
     }
-    id : 3
+    id : 5
 }
 {
     error : {
@@ -89,7 +89,7 @@ Tests that InspectorBackendDispatcher is catching incorrect messages.
             1 : "Parameter 'url' with type 'String' was not found."
         }
     }
-    id : 4
+    id : 6
 }
 {
     error : {
@@ -99,6 +99,5 @@ Tests that InspectorBackendDispatcher is catching incorrect messages.
             0 : "Parameter 'url' with type 'String' was not found."
         }
     }
-    id : 5
+    id : 7
 }
-
index 715ffa8..590e3e6 100644 (file)
@@ -8,14 +8,14 @@ function test()
     var messages = [
         'some wrong string',
         '{}',
-        '{"method":1}',
-        '{"method":"resourceContent"}',
-        '{"id":"not a number","method":"Network.resourceContent"}',
-        '{"id":1,"method":"DOM.test"}',
-        '{"id":2,"method":"Network.getResourceContent"}',
-        '{"id":3,"method":"Network.getResourceContent","params":[]}',
-        '{"id":4,"method":"Network.getResourceContent","params":{}}',
-        '{"id":5,"method":"Network.getResourceContent","params":{"frameId":"not a number"}}',
+        '{"id":"not a number"}',
+        '{"id":1,"method":1}',
+        '{"id":2,"method":"resourceContent"}',
+        '{"id":3,"method":"DOM.test"}',
+        '{"id":4,"method":"Network.getResourceContent"}',
+        '{"id":5,"method":"Network.getResourceContent","params":[]}',
+        '{"id":6,"method":"Network.getResourceContent","params":{}}',
+        '{"id":7,"method":"Network.getResourceContent","params":{"frameId":"not a number"}}',
     ];
     var numberOfReports = 0;
 
index 82c054b..499df67 100644 (file)
@@ -1,3 +1,14 @@
+2011-04-12  Ilya Tikhonovsky  <loislo@chromium.org>
+
+        Reviewed by Yury Semikhatsky.
+
+        Web Inspector: there was incorrect value of id property of responses for malformed json-rpc 2.0 requests.
+        https://bugs.webkit.org/show_bug.cgi?id=58305
+
+        It was 0 if the message is not a json object or it has no id property. But according to spec it must be null.
+
+        * inspector/CodeGeneratorInspector.pm:
+
 2011-04-11  Pavel Podivilov  <podivilov@chromium.org>
 
         Reviewed by Pavel Feldman.
index 8852faf..454d911 100644 (file)
@@ -472,12 +472,12 @@ sub generateBackendFunction
     push(@function, "    // use InspectorFrontend as a marker of WebInspector availability");
     push(@function, "");
     push(@function, "    if (protocolErrors->length()) {");
-    push(@function, "        reportProtocolError(callId, InvalidParams, protocolErrors);");
+    push(@function, "        reportProtocolError(&callId, InvalidParams, protocolErrors);");
     push(@function, "        return;");
     push(@function, "    }");
     push(@function, "");
     push(@function, "    if (error.length()) {");
-    push(@function, "        reportProtocolError(callId, ServerError, error);");
+    push(@function, "        reportProtocolError(&callId, ServerError, error);");
     push(@function, "        return;");
     push(@function, "    }");
     push(@function, "");
@@ -497,14 +497,14 @@ sub generateBackendReportProtocolError
 {
     my $reportProtocolError = << "EOF";
 
-void ${backendClassName}::reportProtocolError(const long callId, CommonErrorCode code, const String& customText) const
+void ${backendClassName}::reportProtocolError(const long* const callId, CommonErrorCode code, const String& customText) const
 {
     RefPtr<InspectorArray> data = InspectorArray::create();
     data->pushString(customText);
     reportProtocolError(callId, code, data.release());
 }
 
-void ${backendClassName}::reportProtocolError(const long callId, CommonErrorCode code, PassRefPtr<InspectorArray> data) const
+void ${backendClassName}::reportProtocolError(const long* const callId, CommonErrorCode code, PassRefPtr<InspectorArray> data) const
 {
     DEFINE_STATIC_LOCAL(Vector<String>,s_commonErrors,);
     if (!s_commonErrors.size()) {
@@ -524,7 +524,10 @@ void ${backendClassName}::reportProtocolError(const long callId, CommonErrorCode
     error->setArray("data", data);
     RefPtr<InspectorObject> message = InspectorObject::create();
     message->setObject("error", error);
-    message->setNumber("id", callId);
+    if (callId)
+        message->setNumber("id", *callId);
+    else
+        message->setValue("id", InspectorValue::null());
     m_inspectorFrontendChannel->sendMessageToFrontend(message->toJSONString());
 }
 EOF
@@ -587,42 +590,42 @@ $mapEntries
 
     RefPtr<InspectorValue> parsedMessage = InspectorValue::parseJSON(message);
     if (!parsedMessage) {
-        reportProtocolError(callId, ParseError, "Message should be in JSON format.");
+        reportProtocolError(0, ParseError, "Message should be in JSON format.");
         return;
     }
 
     RefPtr<InspectorObject> messageObject = parsedMessage->asObject();
     if (!messageObject) {
-        reportProtocolError(callId, InvalidRequest, "Invalid message format. The message should be a JSONified object.");
+        reportProtocolError(0, InvalidRequest, "Invalid message format. The message should be a JSONified object.");
         return;
     }
 
-    RefPtr<InspectorValue> methodValue = messageObject->get("method");
-    if (!methodValue) {
-        reportProtocolError(callId, InvalidRequest, "Invalid message format. 'method' property wasn't found.");
+    RefPtr<InspectorValue> callIdValue = messageObject->get("id");
+    if (!callIdValue) {
+        reportProtocolError(0, InvalidRequest, "Invalid message format. 'id' property was not found in the request.");
         return;
     }
 
-    String method;
-    if (!methodValue->asString(&method)) {
-        reportProtocolError(callId, InvalidRequest, "Invalid message format. The type of 'method' property should be string.");
+    if (!callIdValue->asNumber(&callId)) {
+        reportProtocolError(0, InvalidRequest, "Invalid message format. The type of 'id' property should be number.");
         return;
     }
 
-    RefPtr<InspectorValue> callIdValue = messageObject->get("id");
-    if (!callIdValue) {
-        reportProtocolError(callId, InvalidRequest, "Invalid message format. 'id' property was not found in the request.");
+    RefPtr<InspectorValue> methodValue = messageObject->get("method");
+    if (!methodValue) {
+        reportProtocolError(&callId, InvalidRequest, "Invalid message format. 'method' property wasn't found.");
         return;
     }
 
-    if (!callIdValue->asNumber(&callId)) {
-        reportProtocolError(callId, InvalidRequest, "Invalid message format. The type of 'id' property should be number.");
+    String method;
+    if (!methodValue->asString(&method)) {
+        reportProtocolError(&callId, InvalidRequest, "Invalid message format. The type of 'method' property should be string.");
         return;
     }
 
     HashMap<String, CallHandler>::iterator it = dispatchMap.find(method);
     if (it == dispatchMap.end()) {
-        reportProtocolError(callId, MethodNotFound, makeString("Invalid method name was received. '", method, "' wasn't found."));
+        reportProtocolError(&callId, MethodNotFound, makeString("Invalid method name was received. '", method, "' wasn't found."));
         return;
     }
 
@@ -975,8 +978,8 @@ sub generateBackendAgentFieldsAndConstructor
     push(@backendHead, "        LastEntry,");
     push(@backendHead, "    };");
     push(@backendHead, "");
-    push(@backendHead, "    void reportProtocolError(const long callId, CommonErrorCode, const String& errorText) const;");
-    push(@backendHead, "    void reportProtocolError(const long callId, CommonErrorCode, PassRefPtr<InspectorArray> data) const;");
+    push(@backendHead, "    void reportProtocolError(const long* const callId, CommonErrorCode, const String& errorText) const;");
+    push(@backendHead, "    void reportProtocolError(const long* const callId, CommonErrorCode, PassRefPtr<InspectorArray> data) const;");
     push(@backendHead, "    void dispatch(const String& message);");
     push(@backendHead, "    static bool getCommandName(const String& message, String* result);");
     $backendConstructor = join("\n", @backendHead);