From 1b2863350e19204044a17e78a837b20f35cd3f6e Mon Sep 17 00:00:00 2001
From: brewdente <brewdente@gmail.com>
Date: Mon, 27 Apr 2015 13:06:26 -0400
Subject: [PATCH] Only lower case the first letter of the property.  If there
 is an error, no request id, and there is only 1 request, then we know what to
 do.  Renaming the file for the EVentHandler.

---
 ChromeDevTools/ChromeDevTools.csproj          |  2 +-
 ChromeDevTools/ChromeSession.cs               | 12 ++++++++++
 ...mandResponseHandler.cs => EventHandler.cs} |  0
 .../Serialization/MessageContractResolver.cs  | 22 +++++++++++--------
 4 files changed, 26 insertions(+), 10 deletions(-)
 rename ChromeDevTools/{CommandResponseHandler.cs => EventHandler.cs} (100%)

diff --git a/ChromeDevTools/ChromeDevTools.csproj b/ChromeDevTools/ChromeDevTools.csproj
index 3e152b3..a107509 100644
--- a/ChromeDevTools/ChromeDevTools.csproj
+++ b/ChromeDevTools/ChromeDevTools.csproj
@@ -64,7 +64,7 @@
     <Compile Include="CommandResponse.cs" />
     <Compile Include="CommandResponseAttribute.cs" />
     <Compile Include="CommandResponseFactory.cs" />
-    <Compile Include="CommandResponseHandler.cs" />
+    <Compile Include="EventHandler.cs" />
     <Compile Include="ErrorResponse.cs" />
     <Compile Include="Event.cs" />
     <Compile Include="EventAttribute.cs" />
diff --git a/ChromeDevTools/ChromeSession.cs b/ChromeDevTools/ChromeSession.cs
index e2996f7..9609afc 100644
--- a/ChromeDevTools/ChromeSession.cs
+++ b/ChromeDevTools/ChromeSession.cs
@@ -131,6 +131,18 @@ namespace ChromeDevTools
                 _responses.AddOrUpdate(response.Id, id => response, (key, value) => response);
                 requestMre.Set();
             }
+            else
+            {
+                // in the case of an error, we don't always get the request Id back :(
+                // if there is only one pending requests, we know what to do ... otherwise
+                if (1 == _requestWaitHandles.Count)
+                {
+                    var requestId = _requestWaitHandles.Keys.First();
+                    _requestWaitHandles.TryGetValue(requestId, out requestMre);
+                    _responses.AddOrUpdate(requestId, id => response, (key, value) => response);
+                    requestMre.Set();
+                }
+            }
         }
 
         private Task<ICommandResponse> SendCommand(Command command)
diff --git a/ChromeDevTools/CommandResponseHandler.cs b/ChromeDevTools/EventHandler.cs
similarity index 100%
rename from ChromeDevTools/CommandResponseHandler.cs
rename to ChromeDevTools/EventHandler.cs
diff --git a/ChromeDevTools/Serialization/MessageContractResolver.cs b/ChromeDevTools/Serialization/MessageContractResolver.cs
index 2bfd0fd..0bbe952 100644
--- a/ChromeDevTools/Serialization/MessageContractResolver.cs
+++ b/ChromeDevTools/Serialization/MessageContractResolver.cs
@@ -1,17 +1,21 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Newtonsoft.Json.Serialization;
+using Newtonsoft.Json.Serialization;
+using System;
 
 namespace ChromeDevTools.Serialization
 {
-    class MessageContractResolver : DefaultContractResolver
+    internal class MessageContractResolver : DefaultContractResolver
     {
         protected override string ResolvePropertyName(string propertyName)
         {
-            return propertyName.ToLower();
+            if (String.IsNullOrEmpty(propertyName))
+            {
+                return propertyName;
+            }
+            if (1 == propertyName.Length)
+            {
+                return Char.ToLowerInvariant(propertyName[0]).ToString();
+            }
+            return Char.ToLowerInvariant(propertyName[0]) + propertyName.Substring(1);
         }
     }
-}
+}
\ No newline at end of file
-- 
GitLab