<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[193178] branches/safari-601-branch</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/193178">193178</a></dd>
<dt>Author</dt> <dd>timothy@apple.com</dd>
<dt>Date</dt> <dd>2015-12-03 10:54:23 -0800 (Thu, 03 Dec 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Merge <a href="http://trac.webkit.org/projects/webkit/changeset/188965">r188965</a>. rdar://problem/23221163</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#branchessafari601branchLayoutTestsChangeLog">branches/safari-601-branch/LayoutTests/ChangeLog</a></li>
<li><a href="#branchessafari601branchLayoutTestsinspectorprotocolbackenddispatcherargumenterrorsexpectedtxt">branches/safari-601-branch/LayoutTests/inspector/protocol/backend-dispatcher-argument-errors-expected.txt</a></li>
<li><a href="#branchessafari601branchLayoutTestsinspectorprotocolbackenddispatcherargumenterrorshtml">branches/safari-601-branch/LayoutTests/inspector/protocol/backend-dispatcher-argument-errors.html</a></li>
<li><a href="#branchessafari601branchSourceJavaScriptCoreChangeLog">branches/safari-601-branch/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#branchessafari601branchSourceJavaScriptCoreinspectorInspectorBackendDispatchercpp">branches/safari-601-branch/Source/JavaScriptCore/inspector/InspectorBackendDispatcher.cpp</a></li>
<li><a href="#branchessafari601branchSourceJavaScriptCoreinspectorInspectorBackendDispatcherh">branches/safari-601-branch/Source/JavaScriptCore/inspector/InspectorBackendDispatcher.h</a></li>
<li><a href="#branchessafari601branchSourceJavaScriptCoreinspectorscriptscodegencpp_generator_templatespy">branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator_templates.py</a></li>
<li><a href="#branchessafari601branchSourceJavaScriptCoreinspectorscriptscodegengenerate_cpp_backend_dispatcher_headerpy">branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py</a></li>
<li><a href="#branchessafari601branchSourceJavaScriptCoreinspectorscriptscodegengenerate_cpp_backend_dispatcher_implementationpy">branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py</a></li>
<li><a href="#branchessafari601branchSourceJavaScriptCoreinspectorscriptscodegengenerate_objc_backend_dispatcher_headerpy">branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py</a></li>
<li><a href="#branchessafari601branchSourceJavaScriptCoreinspectorscriptscodegengenerate_objc_backend_dispatcher_implementationpy">branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py</a></li>
<li><a href="#branchessafari601branchSourceJavaScriptCoreinspectorscriptscodegenobjc_generator_templatespy">branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/codegen/objc_generator_templates.py</a></li>
<li><a href="#branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpectedcommandswithasyncattributejsonresult">branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/commands-with-async-attribute.json-result</a></li>
<li><a href="#branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpectedcommandswithoptionalcallreturnparametersjsonresult">branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/commands-with-optional-call-return-parameters.json-result</a></li>
<li><a href="#branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpecteddomainswithvaryingcommandsizesjsonresult">branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/domains-with-varying-command-sizes.json-result</a></li>
<li><a href="#branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpectedenumvaluesjsonresult">branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/enum-values.json-result</a></li>
<li><a href="#branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpectedeventswithoptionalparametersjsonresult">branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/events-with-optional-parameters.json-result</a></li>
<li><a href="#branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpectedgeneratedomainswithfeatureguardsjsonresult">branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/generate-domains-with-feature-guards.json-result</a></li>
<li><a href="#branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpectedsametypeiddifferentdomainjsonresult">branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/same-type-id-different-domain.json-result</a></li>
<li><a href="#branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpectedshadowedoptionaltypesettersjsonresult">branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/shadowed-optional-type-setters.json-result</a></li>
<li><a href="#branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpectedtypedeclarationaliasedprimitivetypejsonresult">branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/type-declaration-aliased-primitive-type.json-result</a></li>
<li><a href="#branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpectedtypedeclarationarraytypejsonresult">branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/type-declaration-array-type.json-result</a></li>
<li><a href="#branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpectedtypedeclarationenumtypejsonresult">branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/type-declaration-enum-type.json-result</a></li>
<li><a href="#branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpectedtypedeclarationobjecttypejsonresult">branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/type-declaration-object-type.json-result</a></li>
<li><a href="#branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpectedtyperequiringruntimecastsjsonresult">branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/type-requiring-runtime-casts.json-result</a></li>
<li><a href="#branchessafari601branchSourceWebInspectorUIChangeLog">branches/safari-601-branch/Source/WebInspectorUI/ChangeLog</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="branchessafari601branchLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/LayoutTests/ChangeLog (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/LayoutTests/ChangeLog        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/LayoutTests/ChangeLog        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -1,5 +1,20 @@
</span><span class="cx"> 2015-12-02  Timothy Hatcher  &lt;timothy@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        Merge r188965. rdar://problem/23221163
+
+    2015-08-25  Brian Burg  &lt;bburg@apple.com&gt;
+
+            Web Inspector: no need to allocate protocolErrors array for every dispatched backend command
+            https://bugs.webkit.org/show_bug.cgi?id=146466
+
+            Reviewed by Joseph Pecoraro.
+
+            * inspector/protocol/backend-dispatcher-argument-errors-expected.txt:
+            * inspector/protocol/backend-dispatcher-argument-errors.html:
+            Stringify the 'data' member before dumping, since it now contains JSON. Rebaseline it.
+
+2015-12-02  Timothy Hatcher  &lt;timothy@apple.com&gt;
+
</ins><span class="cx">         Merge r188897. rdar://problem/23221163
</span><span class="cx"> 
</span><span class="cx">     2015-08-24  Brian Burg  &lt;bburg@apple.com&gt;
</span></span></pre></div>
<a id="branchessafari601branchLayoutTestsinspectorprotocolbackenddispatcherargumenterrorsexpectedtxt"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/LayoutTests/inspector/protocol/backend-dispatcher-argument-errors-expected.txt (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/LayoutTests/inspector/protocol/backend-dispatcher-argument-errors-expected.txt        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/LayoutTests/inspector/protocol/backend-dispatcher-argument-errors-expected.txt        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -8,7 +8,7 @@
</span><span class="cx"> PASS: the reported error should be &quot;InvalidParams&quot; (-32602)
</span><span class="cx"> Actual error code: -32602
</span><span class="cx"> Actual error message: Some arguments of method 'Runtime.evaluate' can't be processed
</span><del>-Actual error data: 'params' object must contain required parameter 'expression' with type 'String'.
</del><ins>+Actual error data: [{&quot;code&quot;:-32602,&quot;message&quot;:&quot;'params' object must contain required parameter 'expression' with type 'String'.&quot;},{&quot;code&quot;:-32602,&quot;message&quot;:&quot;Some arguments of method 'Runtime.evaluate' can't be processed&quot;}]
</ins><span class="cx"> 
</span><span class="cx"> -- Running test case: MissingRequiredParameter
</span><span class="cx"> Sending message: {&quot;id&quot;:123,&quot;method&quot;:&quot;Runtime.evaluate&quot;,&quot;params&quot;:{&quot;stuff&quot;:123}}
</span><span class="lines">@@ -16,7 +16,7 @@
</span><span class="cx"> PASS: the reported error should be &quot;InvalidParams&quot; (-32602)
</span><span class="cx"> Actual error code: -32602
</span><span class="cx"> Actual error message: Some arguments of method 'Runtime.evaluate' can't be processed
</span><del>-Actual error data: Parameter 'expression' with type 'String' was not found.
</del><ins>+Actual error data: [{&quot;code&quot;:-32602,&quot;message&quot;:&quot;Parameter 'expression' with type 'String' was not found.&quot;},{&quot;code&quot;:-32602,&quot;message&quot;:&quot;Some arguments of method 'Runtime.evaluate' can't be processed&quot;}]
</ins><span class="cx"> 
</span><span class="cx"> -- Running test case: RequiredParameterWrongType
</span><span class="cx"> Sending message: {&quot;id&quot;:123,&quot;method&quot;:&quot;Runtime.evaluate&quot;,&quot;params&quot;:{&quot;expression&quot;:[]}}
</span><span class="lines">@@ -24,7 +24,7 @@
</span><span class="cx"> PASS: the reported error should be &quot;InvalidParams&quot; (-32602)
</span><span class="cx"> Actual error code: -32602
</span><span class="cx"> Actual error message: Some arguments of method 'Runtime.evaluate' can't be processed
</span><del>-Actual error data: Parameter 'expression' has wrong type. It must be 'String'.
</del><ins>+Actual error data: [{&quot;code&quot;:-32602,&quot;message&quot;:&quot;Parameter 'expression' has wrong type. It must be 'String'.&quot;},{&quot;code&quot;:-32602,&quot;message&quot;:&quot;Some arguments of method 'Runtime.evaluate' can't be processed&quot;}]
</ins><span class="cx"> 
</span><span class="cx"> -- Running test case: OptionalParameterWrongType
</span><span class="cx"> Sending message: {&quot;id&quot;:123,&quot;method&quot;:&quot;Runtime.evaluate&quot;,&quot;params&quot;:{&quot;expression&quot;:&quot;42&quot;,&quot;includeCommandLineAPI&quot;:123}}
</span><span class="lines">@@ -32,7 +32,7 @@
</span><span class="cx"> PASS: the reported error should be &quot;InvalidParams&quot; (-32602)
</span><span class="cx"> Actual error code: -32602
</span><span class="cx"> Actual error message: Some arguments of method 'Runtime.evaluate' can't be processed
</span><del>-Actual error data: Parameter 'includeCommandLineAPI' has wrong type. It must be 'Boolean'.
</del><ins>+Actual error data: [{&quot;code&quot;:-32602,&quot;message&quot;:&quot;Parameter 'includeCommandLineAPI' has wrong type. It must be 'Boolean'.&quot;},{&quot;code&quot;:-32602,&quot;message&quot;:&quot;Some arguments of method 'Runtime.evaluate' can't be processed&quot;}]
</ins><span class="cx"> 
</span><span class="cx"> -- Running test case: TestErrorCodeForSyncServerError
</span><span class="cx"> Sending message: {&quot;id&quot;:123,&quot;method&quot;:&quot;Database.getDatabaseTableNames&quot;,&quot;params&quot;:{&quot;databaseId&quot;:&quot;thisisNotADatabase&quot;}}
</span><span class="lines">@@ -40,6 +40,7 @@
</span><span class="cx"> PASS: the reported error should be &quot;ServerError&quot; (-32000)
</span><span class="cx"> Actual error code: -32000
</span><span class="cx"> Actual error message: Database agent is not enabled
</span><ins>+Actual error data: [{&quot;code&quot;:-32000,&quot;message&quot;:&quot;Database agent is not enabled&quot;}]
</ins><span class="cx"> 
</span><span class="cx"> -- Running test case: TestErrorCodeForAsyncServerError
</span><span class="cx"> Sending message: {&quot;id&quot;:123,&quot;method&quot;:&quot;Database.executeSQL&quot;,&quot;params&quot;:{&quot;databaseId&quot;:&quot;thisisNotADatabase&quot;,&quot;query&quot;:&quot;asdf&quot;}}
</span><span class="lines">@@ -47,6 +48,7 @@
</span><span class="cx"> PASS: the reported error should be &quot;ServerError&quot; (-32000)
</span><span class="cx"> Actual error code: -32000
</span><span class="cx"> Actual error message: Database agent is not enabled
</span><ins>+Actual error data: [{&quot;code&quot;:-32000,&quot;message&quot;:&quot;Database agent is not enabled&quot;}]
</ins><span class="cx"> 
</span><span class="cx"> -- Running test case: CommandWithBadArgumentValue
</span><span class="cx"> Sending message: {&quot;id&quot;:123,&quot;method&quot;:&quot;Runtime.getProperties&quot;,&quot;params&quot;:{&quot;objectId&quot;:&quot;thisisNotAnId&quot;}}
</span><span class="lines">@@ -54,4 +56,5 @@
</span><span class="cx"> PASS: the reported error should be &quot;ServerError&quot; (-32000)
</span><span class="cx"> Actual error code: -32000
</span><span class="cx"> Actual error message: Inspected frame has gone
</span><ins>+Actual error data: [{&quot;code&quot;:-32000,&quot;message&quot;:&quot;Inspected frame has gone&quot;}]
</ins><span class="cx"> 
</span></span></pre></div>
<a id="branchessafari601branchLayoutTestsinspectorprotocolbackenddispatcherargumenterrorshtml"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/LayoutTests/inspector/protocol/backend-dispatcher-argument-errors.html (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/LayoutTests/inspector/protocol/backend-dispatcher-argument-errors.html        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/LayoutTests/inspector/protocol/backend-dispatcher-argument-errors.html        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -36,7 +36,7 @@
</span><span class="cx">                     ProtocolTest.log(&quot;Actual error code: &quot; + response.code);
</span><span class="cx">                     ProtocolTest.log(&quot;Actual error message: &quot; + response.message);
</span><span class="cx">                     if (response.data)
</span><del>-                        ProtocolTest.log(&quot;Actual error data: &quot; + response.data);
</del><ins>+                        ProtocolTest.log(&quot;Actual error data: &quot; + JSON.stringify(response.data));
</ins><span class="cx"> 
</span><span class="cx">                     resolve();
</span><span class="cx">                 })
</span></span></pre></div>
<a id="branchessafari601branchSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/JavaScriptCore/ChangeLog (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/JavaScriptCore/ChangeLog        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/Source/JavaScriptCore/ChangeLog        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -1,5 +1,101 @@
</span><span class="cx"> 2015-12-02  Timothy Hatcher  &lt;timothy@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        Merge r188965. rdar://problem/23221163
+
+    2015-08-25  Brian Burg  &lt;bburg@apple.com&gt;
+
+            Web Inspector: no need to allocate protocolErrors array for every dispatched backend command
+            https://bugs.webkit.org/show_bug.cgi?id=146466
+
+            Reviewed by Joseph Pecoraro.
+
+            Clean up some of the backend dispatcher code, with a focus on eliminating useless allocations
+            of objects in the common case when no protocol errors happen. This is done by saving the
+            current id of each request as it is being processed by the backend dispatcher, and tagging any
+            subsequent errors with that id. This also means we don't have to thread the requestId except
+            in the async command code path.
+
+            This patch also lifts some common code shared between all generated backend command
+            implementatations into the per-domain dispatch method instead. This reduces generated code size.
+
+            To be consistent, this patch standardizes on calling the id of a backend message its 'requestId'.
+            Requests can be handled synchronously or asynchronously (triggered via the 'async' property).
+
+            No new tests, covered by existing protocol tests.
+
+            * inspector/InspectorBackendDispatcher.cpp:
+            (Inspector::BackendDispatcher::CallbackBase::CallbackBase): Split the two code paths for reporting
+            success and failure.
+
+            (Inspector::BackendDispatcher::CallbackBase::sendFailure):
+            (Inspector::BackendDispatcher::CallbackBase::sendSuccess): Renamed from sendIfActive.
+            (Inspector::BackendDispatcher::dispatch): Reset counters and current requestId before dispatching.
+            No need to manually thread the requestId to all reportProtocolError calls.
+
+            (Inspector::BackendDispatcher::hasProtocolErrors): Added.
+            (Inspector::BackendDispatcher::sendResponse):
+            (Inspector::BackendDispatcher::sendPendingErrors): Send any saved protocol errors to the frontend.
+            Always send a 'data' member with all of the errors, even if there's just one. We might want to add
+            more information about errors later.
+
+            (Inspector::BackendDispatcher::reportProtocolError): Enqueue a protocol error to be sent later.
+            (Inspector::BackendDispatcher::getPropertyValue): Remove useless type parameters and nuke most of
+            the type conversion methods. Use std::function types instead of function pointer types.
+
+            (Inspector::castToInteger): Added.
+            (Inspector::castToNumber): Added.
+            (Inspector::BackendDispatcher::getInteger):
+            (Inspector::BackendDispatcher::getDouble):
+            (Inspector::BackendDispatcher::getString):
+            (Inspector::BackendDispatcher::getBoolean):
+            (Inspector::BackendDispatcher::getObject):
+            (Inspector::BackendDispatcher::getArray):
+            (Inspector::BackendDispatcher::getValue):
+            (Inspector::getPropertyValue): Deleted.
+            (Inspector::AsMethodBridges::asInteger): Deleted.
+            (Inspector::AsMethodBridges::asDouble): Deleted.
+            (Inspector::AsMethodBridges::asString): Deleted.
+            (Inspector::AsMethodBridges::asBoolean): Deleted.
+            (Inspector::AsMethodBridges::asObject): Deleted.
+            (Inspector::AsMethodBridges::asArray): Deleted.
+            (Inspector::AsMethodBridges::asValue): Deleted.
+            * inspector/InspectorBackendDispatcher.h:
+            * inspector/scripts/codegen/cpp_generator_templates.py: Extract 'params' object in domain dispatch method.
+            Omit requestIds where possible. Convert dispatch tables to use NeverDestroyed. Check the protocol error count
+            to decide whether to abort the dispatch or not, rather than allocating our own errors array.
+
+            * inspector/scripts/codegen/cpp_generator_templates.py:
+            (void):
+            * inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py: Revert to passing RefPtr&lt;InspectorObject&gt;
+            since parameters are now being passed rather than the message object. Some commands do not require parameters.
+            * inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:
+            (CppBackendDispatcherImplementationGenerator.generate_output):
+            (CppBackendDispatcherImplementationGenerator._generate_small_dispatcher_switch_implementation_for_domain):
+            (CppBackendDispatcherImplementationGenerator._generate_dispatcher_implementation_for_command):
+            * inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:
+            (ObjCBackendDispatcherHeaderGenerator._generate_objc_handler_declaration_for_command):
+            * inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py:
+            (ObjCConfigurationImplementationGenerator._generate_handler_implementation_for_command):
+            (ObjCConfigurationImplementationGenerator._generate_success_block_for_command):
+            * inspector/scripts/codegen/objc_generator_templates.py:
+
+            Rebaseline some protocol generator tests.
+            * inspector/scripts/tests/expected/commands-with-async-attribute.json-result:
+            * inspector/scripts/tests/expected/commands-with-optional-call-return-parameters.json-result:
+            * inspector/scripts/tests/expected/domains-with-varying-command-sizes.json-result:
+            * inspector/scripts/tests/expected/enum-values.json-result:
+            * inspector/scripts/tests/expected/events-with-optional-parameters.json-result:
+            * inspector/scripts/tests/expected/generate-domains-with-feature-guards.json-result:
+            * inspector/scripts/tests/expected/same-type-id-different-domain.json-result:
+            * inspector/scripts/tests/expected/shadowed-optional-type-setters.json-result:
+            * inspector/scripts/tests/expected/type-declaration-aliased-primitive-type.json-result:
+            * inspector/scripts/tests/expected/type-declaration-array-type.json-result:
+            * inspector/scripts/tests/expected/type-declaration-enum-type.json-result:
+            * inspector/scripts/tests/expected/type-declaration-object-type.json-result:
+            * inspector/scripts/tests/expected/type-requiring-runtime-casts.json-result:
+
+2015-12-02  Timothy Hatcher  &lt;timothy@apple.com&gt;
+
</ins><span class="cx">         Merge r188897. rdar://problem/23221163
</span><span class="cx"> 
</span><span class="cx">     2015-08-24  Brian Burg  &lt;bburg@apple.com&gt;
</span></span></pre></div>
<a id="branchessafari601branchSourceJavaScriptCoreinspectorInspectorBackendDispatchercpp"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/JavaScriptCore/inspector/InspectorBackendDispatcher.cpp (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/JavaScriptCore/inspector/InspectorBackendDispatcher.cpp        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/Source/JavaScriptCore/inspector/InspectorBackendDispatcher.cpp        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2013 Apple Inc. All Rights Reserved.
</del><ins>+ * Copyright (C) 2013, 2015 Apple Inc. All Rights Reserved.
</ins><span class="cx">  * Copyright (C) 2011 The Chromium Authors. All rights reserved.
</span><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="lines">@@ -29,15 +29,15 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;InspectorFrontendChannel.h&quot;
</span><span class="cx"> #include &quot;InspectorValues.h&quot;
</span><ins>+#include &lt;wtf/TemporaryChange.h&gt;
</ins><span class="cx"> #include &lt;wtf/text/CString.h&gt;
</span><span class="cx"> #include &lt;wtf/text/WTFString.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace Inspector {
</span><span class="cx"> 
</span><del>-BackendDispatcher::CallbackBase::CallbackBase(Ref&lt;BackendDispatcher&gt;&amp;&amp; backendDispatcher, int id)
</del><ins>+BackendDispatcher::CallbackBase::CallbackBase(Ref&lt;BackendDispatcher&gt;&amp;&amp; backendDispatcher, long requestId)
</ins><span class="cx">     : m_backendDispatcher(WTF::move(backendDispatcher))
</span><del>-    , m_id(id)
-    , m_alreadySent(false)
</del><ins>+    , m_requestId(requestId)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -49,16 +49,24 @@
</span><span class="cx"> void BackendDispatcher::CallbackBase::sendFailure(const ErrorString&amp; error)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(error.length());
</span><del>-    sendIfActive(nullptr, error);
</del><ins>+
+    if (m_alreadySent)
+        return;
+
+    m_alreadySent = true;
+
+    // Immediately send an error message since this is an async response with a single error.
+    m_backendDispatcher-&gt;reportProtocolError(m_requestId, ServerError, error);
+    m_backendDispatcher-&gt;sendPendingErrors();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void BackendDispatcher::CallbackBase::sendIfActive(RefPtr&lt;InspectorObject&gt;&amp;&amp; partialMessage, const ErrorString&amp; invocationError)
</del><ins>+void BackendDispatcher::CallbackBase::sendSuccess(RefPtr&lt;InspectorObject&gt;&amp;&amp; partialMessage)
</ins><span class="cx"> {
</span><span class="cx">     if (m_alreadySent)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    m_backendDispatcher-&gt;sendResponse(m_id, WTF::move(partialMessage), invocationError);
</del><span class="cx">     m_alreadySent = true;
</span><ins>+    m_backendDispatcher-&gt;sendResponse(m_requestId, WTF::move(partialMessage));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> Ref&lt;BackendDispatcher&gt; BackendDispatcher::create(FrontendChannel* frontendChannel)
</span><span class="lines">@@ -76,83 +84,94 @@
</span><span class="cx"> {
</span><span class="cx">     Ref&lt;BackendDispatcher&gt; protect(*this);
</span><span class="cx"> 
</span><ins>+    ASSERT(!m_protocolErrors.size());
+
</ins><span class="cx">     RefPtr&lt;InspectorValue&gt; parsedMessage;
</span><span class="cx">     if (!InspectorValue::parseJSON(message, parsedMessage)) {
</span><del>-        reportProtocolError(nullptr, ParseError, ASCIILiteral(&quot;Message must be in JSON format&quot;));
</del><ins>+        reportProtocolError(ParseError, ASCIILiteral(&quot;Message must be in JSON format&quot;));
+        sendPendingErrors();
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;InspectorObject&gt; messageObject;
</span><span class="cx">     if (!parsedMessage-&gt;asObject(messageObject)) {
</span><del>-        reportProtocolError(nullptr, InvalidRequest, ASCIILiteral(&quot;Message must be a JSONified object&quot;));
</del><ins>+        reportProtocolError(InvalidRequest, ASCIILiteral(&quot;Message must be a JSONified object&quot;));
+        sendPendingErrors();
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    RefPtr&lt;InspectorValue&gt; callIdValue;
-    if (!messageObject-&gt;getValue(ASCIILiteral(&quot;id&quot;), callIdValue)) {
-        reportProtocolError(nullptr, InvalidRequest, ASCIILiteral(&quot;'id' property was not found&quot;));
</del><ins>+    RefPtr&lt;InspectorValue&gt; requestIdValue;
+    if (!messageObject-&gt;getValue(ASCIILiteral(&quot;id&quot;), requestIdValue)) {
+        reportProtocolError(InvalidRequest, ASCIILiteral(&quot;'id' property was not found&quot;));
+        sendPendingErrors();
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    long callId = 0;
-    if (!callIdValue-&gt;asInteger(callId)) {
-        reportProtocolError(nullptr, InvalidRequest, ASCIILiteral(&quot;The type of 'id' property must be integer&quot;));
</del><ins>+    long requestId = 0;
+    if (!requestIdValue-&gt;asInteger(requestId)) {
+        reportProtocolError(InvalidRequest, ASCIILiteral(&quot;The type of 'id' property must be integer&quot;));
+        sendPendingErrors();
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    ASSERT(!m_currentRequestId);
+    TemporaryChange&lt;Optional&lt;long&gt;&gt; scopedRequestId(m_currentRequestId, requestId);
+
</ins><span class="cx">     RefPtr&lt;InspectorValue&gt; methodValue;
</span><span class="cx">     if (!messageObject-&gt;getValue(ASCIILiteral(&quot;method&quot;), methodValue)) {
</span><del>-        reportProtocolError(&amp;callId, InvalidRequest, ASCIILiteral(&quot;'method' property wasn't found&quot;));
</del><ins>+        reportProtocolError(InvalidRequest, ASCIILiteral(&quot;'method' property wasn't found&quot;));
+        sendPendingErrors();
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     String methodString;
</span><span class="cx">     if (!methodValue-&gt;asString(methodString)) {
</span><del>-        reportProtocolError(&amp;callId, InvalidRequest, ASCIILiteral(&quot;The type of 'method' property must be string&quot;));
</del><ins>+        reportProtocolError(InvalidRequest, ASCIILiteral(&quot;The type of 'method' property must be string&quot;));
+        sendPendingErrors();
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     Vector&lt;String&gt; domainAndMethod;
</span><span class="cx">     methodString.split('.', true, domainAndMethod);
</span><span class="cx">     if (domainAndMethod.size() != 2 || !domainAndMethod[0].length() || !domainAndMethod[1].length()) {
</span><del>-        reportProtocolError(&amp;callId, InvalidRequest, ASCIILiteral(&quot;The 'method' property was formatted incorrectly. It should be 'Domain.method'&quot;));
</del><ins>+        reportProtocolError(InvalidRequest, ASCIILiteral(&quot;The 'method' property was formatted incorrectly. It should be 'Domain.method'&quot;));
+        sendPendingErrors();
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     String domain = domainAndMethod[0];
</span><span class="cx">     SupplementalBackendDispatcher* domainDispatcher = m_dispatchers.get(domain);
</span><span class="cx">     if (!domainDispatcher) {
</span><del>-        reportProtocolError(&amp;callId, MethodNotFound, &quot;'&quot; + domain + &quot;' domain was not found&quot;);
</del><ins>+        reportProtocolError(MethodNotFound, &quot;'&quot; + domain + &quot;' domain was not found&quot;);
+        sendPendingErrors();
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     String method = domainAndMethod[1];
</span><del>-    domainDispatcher-&gt;dispatch(callId, method, messageObject.releaseNonNull());
</del><ins>+    domainDispatcher-&gt;dispatch(requestId, method, messageObject.releaseNonNull());
+
+    if (m_protocolErrors.size())
+        sendPendingErrors();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void BackendDispatcher::sendResponse(long callId, RefPtr&lt;InspectorObject&gt;&amp;&amp; result, const ErrorString&amp; invocationError)
</del><ins>+void BackendDispatcher::sendResponse(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; result)
</ins><span class="cx"> {
</span><span class="cx">     if (!m_frontendChannel)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    if (invocationError.length()) {
-        reportProtocolError(&amp;callId, ServerError, invocationError);
-        return;
-    }
</del><ins>+    ASSERT(!m_protocolErrors.size());
</ins><span class="cx"> 
</span><ins>+    // The JSON-RPC 2.0 specification requires that the &quot;error&quot; member have the value 'null'
+    // if no error occurred during an invocation, but we do not include it at all.
</ins><span class="cx">     Ref&lt;InspectorObject&gt; responseMessage = InspectorObject::create();
</span><span class="cx">     responseMessage-&gt;setObject(ASCIILiteral(&quot;result&quot;), result);
</span><del>-    responseMessage-&gt;setInteger(ASCIILiteral(&quot;id&quot;), callId);
</del><ins>+    responseMessage-&gt;setInteger(ASCIILiteral(&quot;id&quot;), requestId);
</ins><span class="cx">     m_frontendChannel-&gt;sendMessageToFrontend(responseMessage-&gt;toJSONString());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void BackendDispatcher::reportProtocolError(const long* const callId, CommonErrorCode errorCode, const String&amp; errorMessage) const
</del><ins>+void BackendDispatcher::sendPendingErrors()
</ins><span class="cx"> {
</span><del>-    reportProtocolError(callId, errorCode, errorMessage, nullptr);
-}
-
-void BackendDispatcher::reportProtocolError(const long* const callId, CommonErrorCode errorCode, const String&amp; errorMessage, RefPtr&lt;Inspector::Protocol::Array&lt;String&gt;&gt;&amp;&amp; data) const
-{
</del><ins>+    // These error codes are specified in JSON-RPC 2.0, Section 5.1.
</ins><span class="cx">     static const int errorCodes[] = {
</span><span class="cx">         -32700, // ParseError
</span><span class="cx">         -32600, // InvalidRequest
</span><span class="lines">@@ -162,33 +181,69 @@
</span><span class="cx">         -32000, // ServerError
</span><span class="cx">     };
</span><span class="cx"> 
</span><del>-    ASSERT_ARG(errorCode, errorCode &gt;= 0);
-    ASSERT_ARG(errorCode, (unsigned)errorCode &lt; WTF_ARRAY_LENGTH(errorCodes));
-    ASSERT_ARG(errorCode, errorCodes[errorCode]);
-
</del><span class="cx">     if (!m_frontendChannel)
</span><span class="cx">         return;
</span><ins>+    
+    // To construct the error object, only use the last error's code and message.
+    // Per JSON-RPC 2.0, Section 5.1, the 'data' member may contain nested errors,
+    // but only one top-level Error object should be sent per request.
+    CommonErrorCode errorCode;
+    String errorMessage;
+    Ref&lt;InspectorArray&gt; payload = InspectorArray::create();
+    
+    for (auto&amp; data : m_protocolErrors) {
+        errorCode = std::get&lt;0&gt;(data);
+        errorMessage = std::get&lt;1&gt;(data);
</ins><span class="cx"> 
</span><del>-    Ref&lt;InspectorObject&gt; error = InspectorObject::create();
-    error-&gt;setInteger(ASCIILiteral(&quot;code&quot;), errorCodes[errorCode]);
-    error-&gt;setString(ASCIILiteral(&quot;message&quot;), errorMessage);
-    if (data)
-        error-&gt;setArray(ASCIILiteral(&quot;data&quot;), WTF::move(data));
</del><ins>+        ASSERT_ARG(errorCode, (unsigned)errorCode &lt; WTF_ARRAY_LENGTH(errorCodes));
+        ASSERT_ARG(errorCode, errorCodes[errorCode]);
</ins><span class="cx"> 
</span><ins>+        Ref&lt;InspectorObject&gt; error = InspectorObject::create();
+        error-&gt;setInteger(ASCIILiteral(&quot;code&quot;), errorCodes[errorCode]);
+        error-&gt;setString(ASCIILiteral(&quot;message&quot;), errorMessage);
+        payload-&gt;pushObject(WTF::move(error));
+    }
+
+    Ref&lt;InspectorObject&gt; topLevelError = InspectorObject::create();
+    topLevelError-&gt;setInteger(ASCIILiteral(&quot;code&quot;), errorCodes[errorCode]);
+    topLevelError-&gt;setString(ASCIILiteral(&quot;message&quot;), errorMessage);
+    topLevelError-&gt;setArray(ASCIILiteral(&quot;data&quot;), WTF::move(payload));
+
</ins><span class="cx">     Ref&lt;InspectorObject&gt; message = InspectorObject::create();
</span><del>-    message-&gt;setObject(ASCIILiteral(&quot;error&quot;), WTF::move(error));
-    if (callId)
-        message-&gt;setInteger(ASCIILiteral(&quot;id&quot;), *callId);
-    else
</del><ins>+    message-&gt;setObject(ASCIILiteral(&quot;error&quot;), WTF::move(topLevelError));
+    if (m_currentRequestId)
+        message-&gt;setInteger(ASCIILiteral(&quot;id&quot;), m_currentRequestId.value());
+    else {
+        // The 'null' value for an unknown id is specified in JSON-RPC 2.0, Section 5.
</ins><span class="cx">         message-&gt;setValue(ASCIILiteral(&quot;id&quot;), InspectorValue::null());
</span><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     m_frontendChannel-&gt;sendMessageToFrontend(message-&gt;toJSONString());
</span><ins>+
+    m_protocolErrors.clear();
+    m_currentRequestId = Nullopt;
</ins><span class="cx"> }
</span><ins>+    
+void BackendDispatcher::reportProtocolError(CommonErrorCode errorCode, const String&amp; errorMessage)
+{
+    reportProtocolError(m_currentRequestId, errorCode, errorMessage);
+}
</ins><span class="cx"> 
</span><del>-template&lt;typename ReturnValueType, typename ValueType, typename DefaultValueType&gt;
-static ReturnValueType getPropertyValue(InspectorObject* object, const String&amp; name, bool* out_optionalValueFound, Inspector::Protocol::Array&lt;String&gt;&amp; protocolErrors, DefaultValueType defaultValue, bool (*asMethod)(InspectorValue&amp;, ValueType&amp;), const char* typeName)
</del><ins>+void BackendDispatcher::reportProtocolError(Optional&lt;long&gt; relatedRequestId, CommonErrorCode errorCode, const String&amp; errorMessage)
</ins><span class="cx"> {
</span><del>-    ValueType result = defaultValue;
</del><ins>+    ASSERT_ARG(errorCode, errorCode &gt;= 0);
+
+    // If the error was reported from an async callback, then no request id will be registered yet.
+    if (!m_currentRequestId)
+        m_currentRequestId = relatedRequestId;
+
+    m_protocolErrors.append(std::tuple&lt;CommonErrorCode, String&gt;(errorCode, errorMessage));
+}
+
+template&lt;typename T&gt;
+T BackendDispatcher::getPropertyValue(InspectorObject* object, const String&amp; name, bool* out_optionalValueFound, T defaultValue, std::function&lt;bool(InspectorValue&amp;, T&amp;)&gt; asMethod, const char* typeName)
+{
+    T result(defaultValue);
</ins><span class="cx">     // out_optionalValueFound signals to the caller whether an optional property was found.
</span><span class="cx">     // if out_optionalValueFound == nullptr, then this is a required property.
</span><span class="cx">     if (out_optionalValueFound)
</span><span class="lines">@@ -196,19 +251,19 @@
</span><span class="cx"> 
</span><span class="cx">     if (!object) {
</span><span class="cx">         if (!out_optionalValueFound)
</span><del>-            protocolErrors.addItem(String::format(&quot;'params' object must contain required parameter '%s' with type '%s'.&quot;, name.utf8().data(), typeName));
</del><ins>+            reportProtocolError(BackendDispatcher::InvalidParams, String::format(&quot;'params' object must contain required parameter '%s' with type '%s'.&quot;, name.utf8().data(), typeName));
</ins><span class="cx">         return result;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     auto findResult = object-&gt;find(name);
</span><span class="cx">     if (findResult == object-&gt;end()) {
</span><span class="cx">         if (!out_optionalValueFound)
</span><del>-            protocolErrors.addItem(String::format(&quot;Parameter '%s' with type '%s' was not found.&quot;, name.utf8().data(), typeName));
</del><ins>+            reportProtocolError(BackendDispatcher::InvalidParams, String::format(&quot;Parameter '%s' with type '%s' was not found.&quot;, name.utf8().data(), typeName));
</ins><span class="cx">         return result;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (!asMethod(*findResult-&gt;value, result)) {
</span><del>-        protocolErrors.addItem(String::format(&quot;Parameter '%s' has wrong type. It must be '%s'.&quot;, name.utf8().data(), typeName));
</del><ins>+        reportProtocolError(BackendDispatcher::InvalidParams, String::format(&quot;Parameter '%s' has wrong type. It must be '%s'.&quot;, name.utf8().data(), typeName));
</ins><span class="cx">         return result;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -218,49 +273,42 @@
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-struct AsMethodBridges {
-    static bool asInteger(InspectorValue&amp; value, int&amp; output) { return value.asInteger(output); }
-    static bool asDouble(InspectorValue&amp; value, double&amp; output) { return value.asDouble(output); }
-    static bool asString(InspectorValue&amp; value, String&amp; output) { return value.asString(output); }
-    static bool asBoolean(InspectorValue&amp; value, bool&amp; output) { return value.asBoolean(output); }
-    static bool asObject(InspectorValue&amp; value, RefPtr&lt;InspectorObject&gt;&amp; output) { return value.asObject(output); }
-    static bool asArray(InspectorValue&amp; value, RefPtr&lt;InspectorArray&gt;&amp; output) { return value.asArray(output); }
-    static bool asValue(InspectorValue&amp; value, RefPtr&lt;InspectorValue&gt;&amp; output) { return value.asValue(output); }
-};
</del><ins>+static bool castToInteger(InspectorValue&amp; value, int&amp; result) { return value.asInteger(result); }
+static bool castToNumber(InspectorValue&amp; value, double&amp; result) { return value.asDouble(result); }
</ins><span class="cx"> 
</span><del>-int BackendDispatcher::getInteger(InspectorObject* object, const String&amp; name, bool* valueFound, Inspector::Protocol::Array&lt;String&gt;&amp; protocolErrors)
</del><ins>+int BackendDispatcher::getInteger(InspectorObject* object, const String&amp; name, bool* valueFound)
</ins><span class="cx"> {
</span><del>-    return getPropertyValue&lt;int, int, int&gt;(object, name, valueFound, protocolErrors, 0, AsMethodBridges::asInteger, &quot;Integer&quot;);
</del><ins>+    return getPropertyValue&lt;int&gt;(object, name, valueFound, 0, &amp;castToInteger, &quot;Integer&quot;);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-double BackendDispatcher::getDouble(InspectorObject* object, const String&amp; name, bool* valueFound, Inspector::Protocol::Array&lt;String&gt;&amp; protocolErrors)
</del><ins>+double BackendDispatcher::getDouble(InspectorObject* object, const String&amp; name, bool* valueFound)
</ins><span class="cx"> {
</span><del>-    return getPropertyValue&lt;double, double, double&gt;(object, name, valueFound, protocolErrors, 0, AsMethodBridges::asDouble, &quot;Number&quot;);
</del><ins>+    return getPropertyValue&lt;double&gt;(object, name, valueFound, 0, &amp;castToNumber, &quot;Number&quot;);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-String BackendDispatcher::getString(InspectorObject* object, const String&amp; name, bool* valueFound, Inspector::Protocol::Array&lt;String&gt;&amp; protocolErrors)
</del><ins>+String BackendDispatcher::getString(InspectorObject* object, const String&amp; name, bool* valueFound)
</ins><span class="cx"> {
</span><del>-    return getPropertyValue&lt;String, String, String&gt;(object, name, valueFound, protocolErrors, &quot;&quot;, AsMethodBridges::asString, &quot;String&quot;);
</del><ins>+    return getPropertyValue&lt;String&gt;(object, name, valueFound, &quot;&quot;, &amp;InspectorValue::asString, &quot;String&quot;);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool BackendDispatcher::getBoolean(InspectorObject* object, const String&amp; name, bool* valueFound, Inspector::Protocol::Array&lt;String&gt;&amp; protocolErrors)
</del><ins>+bool BackendDispatcher::getBoolean(InspectorObject* object, const String&amp; name, bool* valueFound)
</ins><span class="cx"> {
</span><del>-    return getPropertyValue&lt;bool, bool, bool&gt;(object, name, valueFound, protocolErrors, false, AsMethodBridges::asBoolean, &quot;Boolean&quot;);
</del><ins>+    return getPropertyValue&lt;bool&gt;(object, name, valueFound, false, &amp;InspectorValue::asBoolean, &quot;Boolean&quot;);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-RefPtr&lt;InspectorObject&gt; BackendDispatcher::getObject(InspectorObject* object, const String&amp; name, bool* valueFound, Inspector::Protocol::Array&lt;String&gt;&amp; protocolErrors)
</del><ins>+RefPtr&lt;InspectorObject&gt; BackendDispatcher::getObject(InspectorObject* object, const String&amp; name, bool* valueFound)
</ins><span class="cx"> {
</span><del>-    return getPropertyValue&lt;RefPtr&lt;InspectorObject&gt;, RefPtr&lt;InspectorObject&gt;, InspectorObject*&gt;(object, name, valueFound, protocolErrors, nullptr, AsMethodBridges::asObject, &quot;Object&quot;);
</del><ins>+    return getPropertyValue&lt;RefPtr&lt;InspectorObject&gt;&gt;(object, name, valueFound, nullptr, &amp;InspectorValue::asObject, &quot;Object&quot;);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-RefPtr&lt;InspectorArray&gt; BackendDispatcher::getArray(InspectorObject* object, const String&amp; name, bool* valueFound, Inspector::Protocol::Array&lt;String&gt;&amp; protocolErrors)
</del><ins>+RefPtr&lt;InspectorArray&gt; BackendDispatcher::getArray(InspectorObject* object, const String&amp; name, bool* valueFound)
</ins><span class="cx"> {
</span><del>-    return getPropertyValue&lt;RefPtr&lt;InspectorArray&gt;, RefPtr&lt;InspectorArray&gt;, InspectorArray*&gt;(object, name, valueFound, protocolErrors, nullptr, AsMethodBridges::asArray, &quot;Array&quot;);
</del><ins>+    return getPropertyValue&lt;RefPtr&lt;InspectorArray&gt;&gt;(object, name, valueFound, nullptr, &amp;InspectorValue::asArray, &quot;Array&quot;);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-RefPtr&lt;InspectorValue&gt; BackendDispatcher::getValue(InspectorObject* object, const String&amp; name, bool* valueFound, Inspector::Protocol::Array&lt;String&gt;&amp; protocolErrors)
</del><ins>+RefPtr&lt;InspectorValue&gt; BackendDispatcher::getValue(InspectorObject* object, const String&amp; name, bool* valueFound)
</ins><span class="cx"> {
</span><del>-    return getPropertyValue&lt;RefPtr&lt;InspectorValue&gt;, RefPtr&lt;InspectorValue&gt;, InspectorValue*&gt;(object, name, valueFound, protocolErrors, nullptr, AsMethodBridges::asValue, &quot;Value&quot;);
</del><ins>+    return getPropertyValue&lt;RefPtr&lt;InspectorValue&gt;&gt;(object, name, valueFound, nullptr, &amp;InspectorValue::asValue, &quot;Value&quot;);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace Inspector
</span></span></pre></div>
<a id="branchessafari601branchSourceJavaScriptCoreinspectorInspectorBackendDispatcherh"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/JavaScriptCore/inspector/InspectorBackendDispatcher.h (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/JavaScriptCore/inspector/InspectorBackendDispatcher.h        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/Source/JavaScriptCore/inspector/InspectorBackendDispatcher.h        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2013 Apple Inc. All Rights Reserved.
</del><ins>+ * Copyright (C) 2013, 2015 Apple Inc. All Rights Reserved.
</ins><span class="cx">  * Copyright (C) 2011 The Chromium Authors. All rights reserved.
</span><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="lines">@@ -28,6 +28,7 @@
</span><span class="cx"> #define InspectorBackendDispatcher_h
</span><span class="cx"> 
</span><span class="cx"> #include &quot;InspectorProtocolTypes.h&quot;
</span><ins>+#include &lt;wtf/Optional.h&gt;
</ins><span class="cx"> #include &lt;wtf/RefCounted.h&gt;
</span><span class="cx"> #include &lt;wtf/text/WTFString.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -43,35 +44,36 @@
</span><span class="cx">     SupplementalBackendDispatcher(BackendDispatcher&amp; backendDispatcher)
</span><span class="cx">         : m_backendDispatcher(backendDispatcher) { }
</span><span class="cx">     virtual ~SupplementalBackendDispatcher() { }
</span><del>-    virtual void dispatch(long callId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message) = 0;
</del><ins>+    virtual void dispatch(long requestId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message) = 0;
</ins><span class="cx"> protected:
</span><span class="cx">     Ref&lt;BackendDispatcher&gt; m_backendDispatcher;
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class JS_EXPORT_PRIVATE BackendDispatcher : public RefCounted&lt;BackendDispatcher&gt; {
</del><ins>+class BackendDispatcher : public RefCounted&lt;BackendDispatcher&gt; {
</ins><span class="cx"> public:
</span><del>-    static Ref&lt;BackendDispatcher&gt; create(FrontendChannel*);
</del><ins>+    JS_EXPORT_PRIVATE static Ref&lt;BackendDispatcher&gt; create(FrontendChannel*);
</ins><span class="cx"> 
</span><span class="cx">     class JS_EXPORT_PRIVATE CallbackBase : public RefCounted&lt;CallbackBase&gt; {
</span><span class="cx">     public:
</span><del>-        CallbackBase(Ref&lt;BackendDispatcher&gt;&amp;&amp;, int id);
</del><ins>+        CallbackBase(Ref&lt;BackendDispatcher&gt;&amp;&amp;, long requestId);
</ins><span class="cx"> 
</span><span class="cx">         bool isActive() const;
</span><del>-        void sendFailure(const ErrorString&amp;);
</del><span class="cx">         void disable() { m_alreadySent = true; }
</span><span class="cx"> 
</span><del>-    protected:
-        void sendIfActive(RefPtr&lt;InspectorObject&gt;&amp;&amp; partialMessage, const ErrorString&amp; invocationError);
</del><ins>+        void sendSuccess(RefPtr&lt;InspectorObject&gt;&amp;&amp;);
+        void sendFailure(const ErrorString&amp;);
</ins><span class="cx"> 
</span><span class="cx">     private:
</span><span class="cx">         Ref&lt;BackendDispatcher&gt; m_backendDispatcher;
</span><del>-        int m_id;
-        bool m_alreadySent;
</del><ins>+        long m_requestId;
+        bool m_alreadySent { false };
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     void clearFrontend() { m_frontendChannel = nullptr; }
</span><span class="cx">     bool isActive() const { return !!m_frontendChannel; }
</span><span class="cx"> 
</span><ins>+    bool hasProtocolErrors() const { return m_protocolErrors.size() &gt; 0; }
+
</ins><span class="cx">     enum CommonErrorCode {
</span><span class="cx">         ParseError = 0,
</span><span class="cx">         InvalidRequest,
</span><span class="lines">@@ -82,25 +84,42 @@
</span><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     void registerDispatcherForDomain(const String&amp; domain, SupplementalBackendDispatcher*);
</span><del>-    void dispatch(const String&amp; message);
-    void sendResponse(long callId, RefPtr&lt;InspectorObject&gt;&amp;&amp; result, const ErrorString&amp; invocationError);
-    void reportProtocolError(const long* const callId, CommonErrorCode, const String&amp; errorMessage) const;
-    void reportProtocolError(const long* const callId, CommonErrorCode, const String&amp; errorMessage, RefPtr&lt;Inspector::Protocol::Array&lt;String&gt;&gt;&amp;&amp; data) const;
</del><ins>+    JS_EXPORT_PRIVATE void dispatch(const String&amp; message);
</ins><span class="cx"> 
</span><del>-    static int getInteger(InspectorObject*, const String&amp; name, bool* valueFound, Inspector::Protocol::Array&lt;String&gt;&amp; protocolErrors);
-    static double getDouble(InspectorObject*, const String&amp; name, bool* valueFound, Inspector::Protocol::Array&lt;String&gt;&amp; protocolErrors);
-    static String getString(InspectorObject*, const String&amp; name, bool* valueFound, Inspector::Protocol::Array&lt;String&gt;&amp; protocolErrors);
-    static bool getBoolean(InspectorObject*, const String&amp; name, bool* valueFound, Inspector::Protocol::Array&lt;String&gt;&amp; protocolErrors);
-    static RefPtr&lt;InspectorValue&gt; getValue(InspectorObject*, const String&amp; name, bool* valueFound, Inspector::Protocol::Array&lt;String&gt;&amp; protocolErrors);
-    static RefPtr&lt;InspectorObject&gt; getObject(InspectorObject*, const String&amp; name, bool* valueFound, Inspector::Protocol::Array&lt;String&gt;&amp; protocolErrors);
-    static RefPtr&lt;InspectorArray&gt; getArray(InspectorObject*, const String&amp; name, bool* valueFound, Inspector::Protocol::Array&lt;String&gt;&amp; protocolErrors);
</del><ins>+    JS_EXPORT_PRIVATE void sendResponse(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; result);
+    JS_EXPORT_PRIVATE void sendPendingErrors();
</ins><span class="cx"> 
</span><ins>+    void reportProtocolError(CommonErrorCode, const String&amp; errorMessage);
+    JS_EXPORT_PRIVATE void reportProtocolError(Optional&lt;long&gt; relatedRequestId, CommonErrorCode, const String&amp; errorMessage);
+
+    template&lt;typename T&gt;
+    T getPropertyValue(InspectorObject*, const String&amp; name, bool* out_optionalValueFound, T defaultValue, std::function&lt;bool(InspectorValue&amp;, T&amp;)&gt;, const char* typeName);
+
+    int getInteger(InspectorObject*, const String&amp; name, bool* valueFound);
+    double getDouble(InspectorObject*, const String&amp; name, bool* valueFound);
+    String getString(InspectorObject*, const String&amp; name, bool* valueFound);
+    bool getBoolean(InspectorObject*, const String&amp; name, bool* valueFound);
+    RefPtr&lt;InspectorValue&gt; getValue(InspectorObject*, const String&amp; name, bool* valueFound);
+    RefPtr&lt;InspectorObject&gt; getObject(InspectorObject*, const String&amp; name, bool* valueFound);
+    RefPtr&lt;InspectorArray&gt; getArray(InspectorObject*, const String&amp; name, bool* valueFound);
+
</ins><span class="cx"> private:
</span><del>-    BackendDispatcher(FrontendChannel* FrontendChannel)
-        : m_frontendChannel(FrontendChannel) { }
</del><ins>+    BackendDispatcher(FrontendChannel* channel)
+        : m_frontendChannel(channel)
+    {
+    }
</ins><span class="cx"> 
</span><span class="cx">     FrontendChannel* m_frontendChannel;
</span><span class="cx">     HashMap&lt;String, SupplementalBackendDispatcher*&gt; m_dispatchers;
</span><ins>+
+    // Protocol errors reported for the top-level request being processed.
+    // If processing a request triggers async responses, then any related errors will
+    // be attributed to the top-level request, but generate separate error messages.
+    Vector&lt;std::tuple&lt;CommonErrorCode, String&gt;&gt; m_protocolErrors;
+
+    // For synchronously handled requests, avoid plumbing requestId through every
+    // call that could potentially fail with a protocol error.
+    Optional&lt;long&gt; m_currentRequestId { Nullopt };
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace Inspector
</span></span></pre></div>
<a id="branchessafari601branchSourceJavaScriptCoreinspectorscriptscodegencpp_generator_templatespy"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator_templates.py (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator_templates.py        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator_templates.py        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -1,6 +1,6 @@
</span><span class="cx"> #!/usr/bin/env python
</span><span class="cx"> #
</span><del>-# Copyright (c) 2014 Apple Inc. All rights reserved.
</del><ins>+# Copyright (c) 2014, 2015 Apple Inc. All rights reserved.
</ins><span class="cx"> # Copyright (c) 2014 University of Washington. All rights reserved.
</span><span class="cx"> #
</span><span class="cx"> # Redistribution and use in source and binary forms, with or without
</span><span class="lines">@@ -101,7 +101,7 @@
</span><span class="cx">     &quot;&quot;&quot;${classAndExportMacro} ${domainName}BackendDispatcher final : public SupplementalBackendDispatcher {
</span><span class="cx"> public:
</span><span class="cx">     static Ref&lt;${domainName}BackendDispatcher&gt; create(BackendDispatcher*, ${domainName}BackendDispatcherHandler*);
</span><del>-    virtual void dispatch(long callId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message) override;
</del><ins>+    virtual void dispatch(long requestId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message) override;
</ins><span class="cx"> ${commandDeclarations}
</span><span class="cx"> private:
</span><span class="cx">     ${domainName}BackendDispatcher(BackendDispatcher&amp;, ${domainName}BackendDispatcherHandler*);
</span><span class="lines">@@ -123,24 +123,30 @@
</span><span class="cx">     virtual void ${commandName}(${inParameters}) = 0;&quot;&quot;&quot;)
</span><span class="cx"> 
</span><span class="cx">     BackendDispatcherImplementationSmallSwitch = (
</span><del>-    &quot;&quot;&quot;void ${domainName}BackendDispatcher::dispatch(long callId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message)
</del><ins>+    &quot;&quot;&quot;void ${domainName}BackendDispatcher::dispatch(long requestId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message)
</ins><span class="cx"> {
</span><span class="cx">     Ref&lt;${domainName}BackendDispatcher&gt; protect(*this);
</span><span class="cx"> 
</span><ins>+    RefPtr&lt;InspectorObject&gt; parameters;
+    message-&gt;getObject(ASCIILiteral(&quot;params&quot;), parameters);
+
</ins><span class="cx"> ${dispatchCases}
</span><span class="cx">     else
</span><del>-        m_backendDispatcher-&gt;reportProtocolError(&amp;callId, BackendDispatcher::MethodNotFound, makeString('\\'', &quot;${domainName}&quot;, '.', method, &quot;' was not found&quot;));
</del><ins>+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::MethodNotFound, makeString('\\'', &quot;${domainName}&quot;, '.', method, &quot;' was not found&quot;));
</ins><span class="cx"> }&quot;&quot;&quot;)
</span><span class="cx"> 
</span><span class="cx">     BackendDispatcherImplementationLargeSwitch = (
</span><del>-&quot;&quot;&quot;void ${domainName}BackendDispatcher::dispatch(long callId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message)
</del><ins>+&quot;&quot;&quot;void ${domainName}BackendDispatcher::dispatch(long requestId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message)
</ins><span class="cx"> {
</span><span class="cx">     Ref&lt;${domainName}BackendDispatcher&gt; protect(*this);
</span><span class="cx"> 
</span><del>-    typedef void (${domainName}BackendDispatcher::*CallHandler)(long callId, const InspectorObject&amp; message);
</del><ins>+    RefPtr&lt;InspectorObject&gt; parameters;
+    message-&gt;getObject(ASCIILiteral(&quot;params&quot;), parameters);
+
+    typedef void (${domainName}BackendDispatcher::*CallHandler)(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; message);
</ins><span class="cx">     typedef HashMap&lt;String, CallHandler&gt; DispatchMap;
</span><del>-    DEPRECATED_DEFINE_STATIC_LOCAL(DispatchMap, dispatchMap, ());
-    if (dispatchMap.isEmpty()) {
</del><ins>+    static NeverDestroyed&lt;DispatchMap&gt; dispatchMap;
+    if (dispatchMap.get().isEmpty()) {
</ins><span class="cx">         static const struct MethodTable {
</span><span class="cx">             const char* name;
</span><span class="cx">             CallHandler handler;
</span><span class="lines">@@ -149,16 +155,16 @@
</span><span class="cx">         };
</span><span class="cx">         size_t length = WTF_ARRAY_LENGTH(commands);
</span><span class="cx">         for (size_t i = 0; i &lt; length; ++i)
</span><del>-            dispatchMap.add(commands[i].name, commands[i].handler);
</del><ins>+            dispatchMap.get().add(commands[i].name, commands[i].handler);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    HashMap&lt;String, CallHandler&gt;::iterator it = dispatchMap.find(method);
-    if (it == dispatchMap.end()) {
-        m_backendDispatcher-&gt;reportProtocolError(&amp;callId, BackendDispatcher::MethodNotFound, makeString('\\'', &quot;${domainName}&quot;, '.', method, &quot;' was not found&quot;));
</del><ins>+    auto findResult = dispatchMap.get().find(method);
+    if (findResult == dispatchMap.get().end()) {
+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::MethodNotFound, makeString('\\'', &quot;${domainName}&quot;, '.', method, &quot;' was not found&quot;));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ((*this).*it-&gt;value)(callId, message.get());
</del><ins>+    ((*this).*findResult-&gt;value)(requestId, WTF::move(parameters));
</ins><span class="cx"> }&quot;&quot;&quot;)
</span><span class="cx"> 
</span><span class="cx">     BackendDispatcherImplementationDomainConstructor = (
</span><span class="lines">@@ -178,13 +184,9 @@
</span><span class="cx"> }&quot;&quot;&quot;)
</span><span class="cx"> 
</span><span class="cx">     BackendDispatcherImplementationPrepareCommandArguments = (
</span><del>-&quot;&quot;&quot;    auto protocolErrors = Inspector::Protocol::Array&lt;String&gt;::create();
-    RefPtr&lt;InspectorObject&gt; paramsContainer;
-    message.getObject(ASCIILiteral(&quot;params&quot;), paramsContainer);
-${inParameterDeclarations}
-    if (protocolErrors-&gt;length()) {
-        String errorMessage = String::format(&quot;Some arguments of method \'%s\' can't be processed&quot;, &quot;${domainName}.${commandName}&quot;);
-        m_backendDispatcher-&gt;reportProtocolError(&amp;callId, BackendDispatcher::InvalidParams, errorMessage, WTF::move(protocolErrors));
</del><ins>+&quot;&quot;&quot;${inParameterDeclarations}
+    if (m_backendDispatcher-&gt;hasProtocolErrors()) {
+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::InvalidParams, String::format(&quot;Some arguments of method \'%s\' can't be processed&quot;, &quot;${domainName}.${commandName}&quot;));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> &quot;&quot;&quot;)
</span><span class="lines">@@ -196,7 +198,7 @@
</span><span class="cx"> {
</span><span class="cx">     Ref&lt;InspectorObject&gt; jsonMessage = InspectorObject::create();
</span><span class="cx"> ${outParameterAssignments}
</span><del>-    sendIfActive(WTF::move(jsonMessage), ErrorString());
</del><ins>+    CallbackBase::sendSuccess(WTF::move(jsonMessage));
</ins><span class="cx"> }&quot;&quot;&quot;)
</span><span class="cx"> 
</span><span class="cx">     FrontendDispatcherDomainDispatcherDeclaration = (
</span></span></pre></div>
<a id="branchessafari601branchSourceJavaScriptCoreinspectorscriptscodegengenerate_cpp_backend_dispatcher_headerpy"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -1,6 +1,6 @@
</span><span class="cx"> #!/usr/bin/env python
</span><span class="cx"> #
</span><del>-# Copyright (c) 2014 Apple Inc. All rights reserved.
</del><ins>+# Copyright (c) 2014, 2015 Apple Inc. All rights reserved.
</ins><span class="cx"> # Copyright (c) 2014 University of Washington. All rights reserved.
</span><span class="cx"> #
</span><span class="cx"> # Redistribution and use in source and binary forms, with or without
</span><span class="lines">@@ -205,4 +205,4 @@
</span><span class="cx">         return self.wrap_with_guard_for_domain(domain, Template(CppTemplates.BackendDispatcherHeaderDomainDispatcherDeclaration).substitute(None, **handler_args))
</span><span class="cx"> 
</span><span class="cx">     def _generate_dispatcher_declaration_for_command(self, command):
</span><del>-        return &quot;    void %s(long callId, const InspectorObject&amp; message);&quot; % command.command_name
</del><ins>+        return &quot;    void %s(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; parameters);&quot; % command.command_name
</ins></span></pre></div>
<a id="branchessafari601branchSourceJavaScriptCoreinspectorscriptscodegengenerate_cpp_backend_dispatcher_implementationpy"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -1,6 +1,6 @@
</span><span class="cx"> #!/usr/bin/env python
</span><span class="cx"> #
</span><del>-# Copyright (c) 2014 Apple Inc. All rights reserved.
</del><ins>+# Copyright (c) 2014, 2015 Apple Inc. All rights reserved.
</ins><span class="cx"> # Copyright (c) 2014 University of Washington. All rights reserved.
</span><span class="cx"> #
</span><span class="cx"> # Redistribution and use in source and binary forms, with or without
</span><span class="lines">@@ -51,6 +51,7 @@
</span><span class="cx">         secondary_headers = [
</span><span class="cx">             '&lt;inspector/InspectorFrontendChannel.h&gt;',
</span><span class="cx">             '&lt;inspector/InspectorValues.h&gt;',
</span><ins>+            '&lt;wtf/NeverDestroyed.h&gt;',
</ins><span class="cx">             '&lt;wtf/text/CString.h&gt;']
</span><span class="cx"> 
</span><span class="cx">         secondary_includes = ['#include %s' % header for header in secondary_headers]
</span><span class="lines">@@ -104,10 +105,10 @@
</span><span class="cx">     def _generate_small_dispatcher_switch_implementation_for_domain(self, domain):
</span><span class="cx">         cases = []
</span><span class="cx">         cases.append('    if (method == &quot;%s&quot;)' % domain.commands[0].command_name)
</span><del>-        cases.append('        %s(callId, message);' % domain.commands[0].command_name)
</del><ins>+        cases.append('        %s(requestId, WTF::move(parameters));' % domain.commands[0].command_name)
</ins><span class="cx">         for command in domain.commands[1:]:
</span><span class="cx">             cases.append('    else if (method == &quot;%s&quot;)' % command.command_name)
</span><del>-            cases.append('        %s(callId, message);' % command.command_name)
</del><ins>+            cases.append('        %s(requestId, WTF::move(parameters));' % command.command_name)
</ins><span class="cx"> 
</span><span class="cx">         switch_args = {
</span><span class="cx">             'domainName': domain.domain_name,
</span><span class="lines">@@ -170,7 +171,7 @@
</span><span class="cx">         in_parameter_declarations = []
</span><span class="cx">         out_parameter_declarations = []
</span><span class="cx">         out_parameter_assignments = []
</span><del>-        alternate_dispatcher_method_parameters = ['callId']
</del><ins>+        alternate_dispatcher_method_parameters = ['requestId']
</ins><span class="cx">         method_parameters = ['error']
</span><span class="cx"> 
</span><span class="cx">         for parameter in command.call_parameters:
</span><span class="lines">@@ -207,7 +208,7 @@
</span><span class="cx">                 'successOutParam': out_success_argument
</span><span class="cx">             }
</span><span class="cx"> 
</span><del>-            in_parameter_declarations.append('    %(parameterType)s %(parameterName)s = BackendDispatcher::%(keyedGetMethod)s(paramsContainer.get(), ASCIILiteral(&quot;%(parameterKey)s&quot;), %(successOutParam)s, protocolErrors.get());' % param_args)
</del><ins>+            in_parameter_declarations.append('    %(parameterType)s %(parameterName)s = m_backendDispatcher-&gt;%(keyedGetMethod)s(parameters.get(), ASCIILiteral(&quot;%(parameterKey)s&quot;), %(successOutParam)s);' % param_args)
</ins><span class="cx"> 
</span><span class="cx">             if parameter.is_optional:
</span><span class="cx">                 optional_in_parameter_string = '%(parameterName)s_valueFound ? %(parameterExpression)s : nullptr' % param_args
</span><span class="lines">@@ -224,7 +225,7 @@
</span><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             out_parameter_assignments.append('        callback-&gt;disable();')
</span><del>-            out_parameter_assignments.append('        m_backendDispatcher-&gt;reportProtocolError(&amp;callId, BackendDispatcher::ServerError, error);')
</del><ins>+            out_parameter_assignments.append('        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::ServerError, error);')
</ins><span class="cx">             out_parameter_assignments.append('        return;')
</span><span class="cx">             method_parameters.append('callback.copyRef()')
</span><span class="cx"> 
</span><span class="lines">@@ -267,9 +268,9 @@
</span><span class="cx"> 
</span><span class="cx">         lines = []
</span><span class="cx">         if len(command.call_parameters) == 0:
</span><del>-            lines.append('void %(domainName)sBackendDispatcher::%(commandName)s(long callId, const InspectorObject&amp;)' % command_args)
</del><ins>+            lines.append('void %(domainName)sBackendDispatcher::%(commandName)s(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp;)' % command_args)
</ins><span class="cx">         else:
</span><del>-            lines.append('void %(domainName)sBackendDispatcher::%(commandName)s(long callId, const InspectorObject&amp; message)' % command_args)
</del><ins>+            lines.append('void %(domainName)sBackendDispatcher::%(commandName)s(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; parameters)' % command_args)
</ins><span class="cx">         lines.append('{')
</span><span class="cx"> 
</span><span class="cx">         if len(command.call_parameters) &gt; 0:
</span><span class="lines">@@ -286,7 +287,7 @@
</span><span class="cx">         lines.append('    ErrorString error;')
</span><span class="cx">         lines.append('    Ref&lt;InspectorObject&gt; result = InspectorObject::create();')
</span><span class="cx">         if command.is_async:
</span><del>-            lines.append('    Ref&lt;%(domainName)sBackendDispatcherHandler::%(callbackName)s&gt; callback = adoptRef(*new %(domainName)sBackendDispatcherHandler::%(callbackName)s(m_backendDispatcher.copyRef(), callId));' % command_args)
</del><ins>+            lines.append('    Ref&lt;%(domainName)sBackendDispatcherHandler::%(callbackName)s&gt; callback = adoptRef(*new %(domainName)sBackendDispatcherHandler::%(callbackName)s(m_backendDispatcher.copyRef(), requestId));' % command_args)
</ins><span class="cx">         if len(command.return_parameters) &gt; 0:
</span><span class="cx">             lines.extend(out_parameter_declarations)
</span><span class="cx">         lines.append('    m_agent-&gt;%(commandName)s(%(invocationParameters)s);' % command_args)
</span><span class="lines">@@ -305,6 +306,9 @@
</span><span class="cx">             lines.append('')
</span><span class="cx"> 
</span><span class="cx">         if not command.is_async:
</span><del>-            lines.append('    m_backendDispatcher-&gt;sendResponse(callId, WTF::move(result), error);')
</del><ins>+            lines.append('    if (!error.length())')
+            lines.append('        m_backendDispatcher-&gt;sendResponse(requestId, WTF::move(result));')
+            lines.append('    else')
+            lines.append('        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));')
</ins><span class="cx">         lines.append('}')
</span><span class="cx">         return &quot;\n&quot;.join(lines)
</span></span></pre></div>
<a id="branchessafari601branchSourceJavaScriptCoreinspectorscriptscodegengenerate_objc_backend_dispatcher_headerpy"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -94,7 +94,7 @@
</span><span class="cx"> 
</span><span class="cx">     def _generate_objc_handler_declaration_for_command(self, command):
</span><span class="cx">         lines = []
</span><del>-        parameters = ['long callId']
</del><ins>+        parameters = ['long requestId']
</ins><span class="cx">         for _parameter in command.call_parameters:
</span><span class="cx">             parameters.append('%s in_%s' % (CppGenerator.cpp_type_for_unchecked_formal_in_parameter(_parameter), _parameter.parameter_name))
</span><span class="cx"> 
</span></span></pre></div>
<a id="branchessafari601branchSourceJavaScriptCoreinspectorscriptscodegengenerate_objc_backend_dispatcher_implementationpy"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -82,7 +82,7 @@
</span><span class="cx"> 
</span><span class="cx">     def _generate_handler_implementation_for_command(self, domain, command):
</span><span class="cx">         lines = []
</span><del>-        parameters = ['long callId']
</del><ins>+        parameters = ['long requestId']
</ins><span class="cx">         for parameter in command.call_parameters:
</span><span class="cx">             parameters.append('%s in_%s' % (CppGenerator.cpp_type_for_unchecked_formal_in_parameter(parameter), parameter.parameter_name))
</span><span class="cx"> 
</span><span class="lines">@@ -139,9 +139,9 @@
</span><span class="cx">                 else:
</span><span class="cx">                     lines.append('        if (%s)' % var_name)
</span><span class="cx">                     lines.append('            resultObject-&gt;%s(ASCIILiteral(&quot;%s&quot;), %s);' % (keyed_set_method, parameter.parameter_name, export_expression))
</span><del>-            lines.append('        backendDispatcher()-&gt;sendResponse(callId, WTF::move(resultObject), String());')
</del><ins>+            lines.append('        backendDispatcher()-&gt;sendResponse(requestId, WTF::move(resultObject));')
</ins><span class="cx">         else:
</span><del>-            lines.append('        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), String());')
</del><ins>+            lines.append('        backendDispatcher()-&gt;sendResponse(requestId, InspectorObject::create());')
</ins><span class="cx"> 
</span><span class="cx">         lines.append('    };')
</span><span class="cx">         return '\n'.join(lines)
</span></span></pre></div>
<a id="branchessafari601branchSourceJavaScriptCoreinspectorscriptscodegenobjc_generator_templatespy"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/codegen/objc_generator_templates.py (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/codegen/objc_generator_templates.py        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/codegen/objc_generator_templates.py        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -112,7 +112,8 @@
</span><span class="cx">     &quot;&quot;&quot;void ObjCInspector${domainName}BackendDispatcher::${commandName}(${parameters})
</span><span class="cx"> {
</span><span class="cx">     id errorCallback = ^(NSString *error) {
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), error);
</del><ins>+        backendDispatcher()-&gt;reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+        backendDispatcher()-&gt;sendPendingErrors();
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx"> ${successCallback}
</span></span></pre></div>
<a id="branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpectedcommandswithasyncattributejsonresult"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/commands-with-async-attribute.json-result (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/commands-with-async-attribute.json-result        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/commands-with-async-attribute.json-result        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -187,12 +187,12 @@
</span><span class="cx"> class DatabaseBackendDispatcher final : public SupplementalBackendDispatcher {
</span><span class="cx"> public:
</span><span class="cx">     static Ref&lt;DatabaseBackendDispatcher&gt; create(BackendDispatcher*, DatabaseBackendDispatcherHandler*);
</span><del>-    virtual void dispatch(long callId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message) override;
</del><ins>+    virtual void dispatch(long requestId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message) override;
</ins><span class="cx"> private:
</span><del>-    void executeSQLSyncOptionalReturnValues(long callId, const InspectorObject&amp; message);
-    void executeSQLAsyncOptionalReturnValues(long callId, const InspectorObject&amp; message);
-    void executeSQLSync(long callId, const InspectorObject&amp; message);
-    void executeSQLAsync(long callId, const InspectorObject&amp; message);
</del><ins>+    void executeSQLSyncOptionalReturnValues(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; parameters);
+    void executeSQLAsyncOptionalReturnValues(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; parameters);
+    void executeSQLSync(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; parameters);
+    void executeSQLAsync(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; parameters);
</ins><span class="cx"> private:
</span><span class="cx">     DatabaseBackendDispatcher(BackendDispatcher&amp;, DatabaseBackendDispatcherHandler*);
</span><span class="cx">     DatabaseBackendDispatcherHandler* m_agent;
</span><span class="lines">@@ -245,6 +245,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &lt;inspector/InspectorFrontendChannel.h&gt;
</span><span class="cx"> #include &lt;inspector/InspectorValues.h&gt;
</span><ins>+#include &lt;wtf/NeverDestroyed.h&gt;
</ins><span class="cx"> #include &lt;wtf/text/CString.h&gt;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="lines">@@ -270,38 +271,37 @@
</span><span class="cx">     m_backendDispatcher-&gt;registerDispatcherForDomain(ASCIILiteral(&quot;Database&quot;), this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void DatabaseBackendDispatcher::dispatch(long callId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message)
</del><ins>+void DatabaseBackendDispatcher::dispatch(long requestId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message)
</ins><span class="cx"> {
</span><span class="cx">     Ref&lt;DatabaseBackendDispatcher&gt; protect(*this);
</span><span class="cx"> 
</span><ins>+    RefPtr&lt;InspectorObject&gt; parameters;
+    message-&gt;getObject(ASCIILiteral(&quot;params&quot;), parameters);
+
</ins><span class="cx">     if (method == &quot;executeSQLSyncOptionalReturnValues&quot;)
</span><del>-        executeSQLSyncOptionalReturnValues(callId, message);
</del><ins>+        executeSQLSyncOptionalReturnValues(requestId, WTF::move(parameters));
</ins><span class="cx">     else if (method == &quot;executeSQLAsyncOptionalReturnValues&quot;)
</span><del>-        executeSQLAsyncOptionalReturnValues(callId, message);
</del><ins>+        executeSQLAsyncOptionalReturnValues(requestId, WTF::move(parameters));
</ins><span class="cx">     else if (method == &quot;executeSQLSync&quot;)
</span><del>-        executeSQLSync(callId, message);
</del><ins>+        executeSQLSync(requestId, WTF::move(parameters));
</ins><span class="cx">     else if (method == &quot;executeSQLAsync&quot;)
</span><del>-        executeSQLAsync(callId, message);
</del><ins>+        executeSQLAsync(requestId, WTF::move(parameters));
</ins><span class="cx">     else
</span><del>-        m_backendDispatcher-&gt;reportProtocolError(&amp;callId, BackendDispatcher::MethodNotFound, makeString('\'', &quot;Database&quot;, '.', method, &quot;' was not found&quot;));
</del><ins>+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::MethodNotFound, makeString('\'', &quot;Database&quot;, '.', method, &quot;' was not found&quot;));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void DatabaseBackendDispatcher::executeSQLSyncOptionalReturnValues(long callId, const InspectorObject&amp; message)
</del><ins>+void DatabaseBackendDispatcher::executeSQLSyncOptionalReturnValues(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; parameters)
</ins><span class="cx"> {
</span><del>-    auto protocolErrors = Inspector::Protocol::Array&lt;String&gt;::create();
-    RefPtr&lt;InspectorObject&gt; paramsContainer;
-    message.getObject(ASCIILiteral(&quot;params&quot;), paramsContainer);
-    int in_databaseId = BackendDispatcher::getInteger(paramsContainer.get(), ASCIILiteral(&quot;databaseId&quot;), nullptr, protocolErrors.get());
-    String in_query = BackendDispatcher::getString(paramsContainer.get(), ASCIILiteral(&quot;query&quot;), nullptr, protocolErrors.get());
-    if (protocolErrors-&gt;length()) {
-        String errorMessage = String::format(&quot;Some arguments of method '%s' can't be processed&quot;, &quot;Database.executeSQLSyncOptionalReturnValues&quot;);
-        m_backendDispatcher-&gt;reportProtocolError(&amp;callId, BackendDispatcher::InvalidParams, errorMessage, WTF::move(protocolErrors));
</del><ins>+    int in_databaseId = m_backendDispatcher-&gt;getInteger(parameters.get(), ASCIILiteral(&quot;databaseId&quot;), nullptr);
+    String in_query = m_backendDispatcher-&gt;getString(parameters.get(), ASCIILiteral(&quot;query&quot;), nullptr);
+    if (m_backendDispatcher-&gt;hasProtocolErrors()) {
+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::InvalidParams, String::format(&quot;Some arguments of method '%s' can't be processed&quot;, &quot;Database.executeSQLSyncOptionalReturnValues&quot;));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx">     if (m_alternateDispatcher) {
</span><del>-        m_alternateDispatcher-&gt;executeSQLSyncOptionalReturnValues(callId, in_databaseId, in_query);
</del><ins>+        m_alternateDispatcher-&gt;executeSQLSyncOptionalReturnValues(requestId, in_databaseId, in_query);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="lines">@@ -342,7 +342,10 @@
</span><span class="cx">         if (out_printColor.isAssigned())
</span><span class="cx">             result-&gt;setString(ASCIILiteral(&quot;printColor&quot;), out_printColor.getValue());
</span><span class="cx">     }
</span><del>-    m_backendDispatcher-&gt;sendResponse(callId, WTF::move(result), error);
</del><ins>+    if (!error.length())
+        m_backendDispatcher-&gt;sendResponse(requestId, WTF::move(result));
+    else
+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> DatabaseBackendDispatcherHandler::ExecuteSQLAsyncOptionalReturnValuesCallback::ExecuteSQLAsyncOptionalReturnValuesCallback(Ref&lt;BackendDispatcher&gt;&amp;&amp; backendDispatcher, int id) : BackendDispatcher::CallbackBase(WTF::move(backendDispatcher), id) { }
</span><span class="lines">@@ -370,57 +373,49 @@
</span><span class="cx">         jsonMessage-&gt;setArray(ASCIILiteral(&quot;alternateColors&quot;), alternateColors);
</span><span class="cx">     if (printColor.isAssigned())
</span><span class="cx">         jsonMessage-&gt;setString(ASCIILiteral(&quot;printColor&quot;), printColor.getValue());
</span><del>-    sendIfActive(WTF::move(jsonMessage), ErrorString());
</del><ins>+    CallbackBase::sendSuccess(WTF::move(jsonMessage));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void DatabaseBackendDispatcher::executeSQLAsyncOptionalReturnValues(long callId, const InspectorObject&amp; message)
</del><ins>+void DatabaseBackendDispatcher::executeSQLAsyncOptionalReturnValues(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; parameters)
</ins><span class="cx"> {
</span><del>-    auto protocolErrors = Inspector::Protocol::Array&lt;String&gt;::create();
-    RefPtr&lt;InspectorObject&gt; paramsContainer;
-    message.getObject(ASCIILiteral(&quot;params&quot;), paramsContainer);
-    int in_databaseId = BackendDispatcher::getInteger(paramsContainer.get(), ASCIILiteral(&quot;databaseId&quot;), nullptr, protocolErrors.get());
-    String in_query = BackendDispatcher::getString(paramsContainer.get(), ASCIILiteral(&quot;query&quot;), nullptr, protocolErrors.get());
-    if (protocolErrors-&gt;length()) {
-        String errorMessage = String::format(&quot;Some arguments of method '%s' can't be processed&quot;, &quot;Database.executeSQLAsyncOptionalReturnValues&quot;);
-        m_backendDispatcher-&gt;reportProtocolError(&amp;callId, BackendDispatcher::InvalidParams, errorMessage, WTF::move(protocolErrors));
</del><ins>+    int in_databaseId = m_backendDispatcher-&gt;getInteger(parameters.get(), ASCIILiteral(&quot;databaseId&quot;), nullptr);
+    String in_query = m_backendDispatcher-&gt;getString(parameters.get(), ASCIILiteral(&quot;query&quot;), nullptr);
+    if (m_backendDispatcher-&gt;hasProtocolErrors()) {
+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::InvalidParams, String::format(&quot;Some arguments of method '%s' can't be processed&quot;, &quot;Database.executeSQLAsyncOptionalReturnValues&quot;));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx">     if (m_alternateDispatcher) {
</span><del>-        m_alternateDispatcher-&gt;executeSQLAsyncOptionalReturnValues(callId, in_databaseId, in_query);
</del><ins>+        m_alternateDispatcher-&gt;executeSQLAsyncOptionalReturnValues(requestId, in_databaseId, in_query);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     ErrorString error;
</span><span class="cx">     Ref&lt;InspectorObject&gt; result = InspectorObject::create();
</span><del>-    Ref&lt;DatabaseBackendDispatcherHandler::ExecuteSQLAsyncOptionalReturnValuesCallback&gt; callback = adoptRef(*new DatabaseBackendDispatcherHandler::ExecuteSQLAsyncOptionalReturnValuesCallback(m_backendDispatcher.copyRef(), callId));
</del><ins>+    Ref&lt;DatabaseBackendDispatcherHandler::ExecuteSQLAsyncOptionalReturnValuesCallback&gt; callback = adoptRef(*new DatabaseBackendDispatcherHandler::ExecuteSQLAsyncOptionalReturnValuesCallback(m_backendDispatcher.copyRef(), requestId));
</ins><span class="cx">     m_agent-&gt;executeSQLAsyncOptionalReturnValues(error, in_databaseId, in_query, callback.copyRef());
</span><span class="cx"> 
</span><span class="cx">     if (error.length()) {
</span><span class="cx">         callback-&gt;disable();
</span><del>-        m_backendDispatcher-&gt;reportProtocolError(&amp;callId, BackendDispatcher::ServerError, error);
</del><ins>+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::ServerError, error);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void DatabaseBackendDispatcher::executeSQLSync(long callId, const InspectorObject&amp; message)
</del><ins>+void DatabaseBackendDispatcher::executeSQLSync(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; parameters)
</ins><span class="cx"> {
</span><del>-    auto protocolErrors = Inspector::Protocol::Array&lt;String&gt;::create();
-    RefPtr&lt;InspectorObject&gt; paramsContainer;
-    message.getObject(ASCIILiteral(&quot;params&quot;), paramsContainer);
-    int in_databaseId = BackendDispatcher::getInteger(paramsContainer.get(), ASCIILiteral(&quot;databaseId&quot;), nullptr, protocolErrors.get());
-    String in_query = BackendDispatcher::getString(paramsContainer.get(), ASCIILiteral(&quot;query&quot;), nullptr, protocolErrors.get());
-    if (protocolErrors-&gt;length()) {
-        String errorMessage = String::format(&quot;Some arguments of method '%s' can't be processed&quot;, &quot;Database.executeSQLSync&quot;);
-        m_backendDispatcher-&gt;reportProtocolError(&amp;callId, BackendDispatcher::InvalidParams, errorMessage, WTF::move(protocolErrors));
</del><ins>+    int in_databaseId = m_backendDispatcher-&gt;getInteger(parameters.get(), ASCIILiteral(&quot;databaseId&quot;), nullptr);
+    String in_query = m_backendDispatcher-&gt;getString(parameters.get(), ASCIILiteral(&quot;query&quot;), nullptr);
+    if (m_backendDispatcher-&gt;hasProtocolErrors()) {
+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::InvalidParams, String::format(&quot;Some arguments of method '%s' can't be processed&quot;, &quot;Database.executeSQLSync&quot;));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx">     if (m_alternateDispatcher) {
</span><del>-        m_alternateDispatcher-&gt;executeSQLSync(callId, in_databaseId, in_query);
</del><ins>+        m_alternateDispatcher-&gt;executeSQLSync(requestId, in_databaseId, in_query);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="lines">@@ -451,7 +446,10 @@
</span><span class="cx">         result-&gt;setString(ASCIILiteral(&quot;screenColor&quot;), Inspector::Protocol::getEnumConstantValue(out_screenColor));
</span><span class="cx">         result-&gt;setString(ASCIILiteral(&quot;printColor&quot;), Inspector::Protocol::getEnumConstantValue(out_printColor));
</span><span class="cx">     }
</span><del>-    m_backendDispatcher-&gt;sendResponse(callId, WTF::move(result), error);
</del><ins>+    if (!error.length())
+        m_backendDispatcher-&gt;sendResponse(requestId, WTF::move(result));
+    else
+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> DatabaseBackendDispatcherHandler::ExecuteSQLAsyncCallback::ExecuteSQLAsyncCallback(Ref&lt;BackendDispatcher&gt;&amp;&amp; backendDispatcher, int id) : BackendDispatcher::CallbackBase(WTF::move(backendDispatcher), id) { }
</span><span class="lines">@@ -469,37 +467,33 @@
</span><span class="cx">     jsonMessage-&gt;setString(ASCIILiteral(&quot;screenColor&quot;), Inspector::Protocol::getEnumConstantValue(screenColor));
</span><span class="cx">     jsonMessage-&gt;setArray(ASCIILiteral(&quot;alternateColors&quot;), alternateColors);
</span><span class="cx">     jsonMessage-&gt;setString(ASCIILiteral(&quot;printColor&quot;), Inspector::Protocol::getEnumConstantValue(printColor));
</span><del>-    sendIfActive(WTF::move(jsonMessage), ErrorString());
</del><ins>+    CallbackBase::sendSuccess(WTF::move(jsonMessage));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void DatabaseBackendDispatcher::executeSQLAsync(long callId, const InspectorObject&amp; message)
</del><ins>+void DatabaseBackendDispatcher::executeSQLAsync(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; parameters)
</ins><span class="cx"> {
</span><del>-    auto protocolErrors = Inspector::Protocol::Array&lt;String&gt;::create();
-    RefPtr&lt;InspectorObject&gt; paramsContainer;
-    message.getObject(ASCIILiteral(&quot;params&quot;), paramsContainer);
-    int in_databaseId = BackendDispatcher::getInteger(paramsContainer.get(), ASCIILiteral(&quot;databaseId&quot;), nullptr, protocolErrors.get());
-    String in_query = BackendDispatcher::getString(paramsContainer.get(), ASCIILiteral(&quot;query&quot;), nullptr, protocolErrors.get());
-    if (protocolErrors-&gt;length()) {
-        String errorMessage = String::format(&quot;Some arguments of method '%s' can't be processed&quot;, &quot;Database.executeSQLAsync&quot;);
-        m_backendDispatcher-&gt;reportProtocolError(&amp;callId, BackendDispatcher::InvalidParams, errorMessage, WTF::move(protocolErrors));
</del><ins>+    int in_databaseId = m_backendDispatcher-&gt;getInteger(parameters.get(), ASCIILiteral(&quot;databaseId&quot;), nullptr);
+    String in_query = m_backendDispatcher-&gt;getString(parameters.get(), ASCIILiteral(&quot;query&quot;), nullptr);
+    if (m_backendDispatcher-&gt;hasProtocolErrors()) {
+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::InvalidParams, String::format(&quot;Some arguments of method '%s' can't be processed&quot;, &quot;Database.executeSQLAsync&quot;));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx">     if (m_alternateDispatcher) {
</span><del>-        m_alternateDispatcher-&gt;executeSQLAsync(callId, in_databaseId, in_query);
</del><ins>+        m_alternateDispatcher-&gt;executeSQLAsync(requestId, in_databaseId, in_query);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     ErrorString error;
</span><span class="cx">     Ref&lt;InspectorObject&gt; result = InspectorObject::create();
</span><del>-    Ref&lt;DatabaseBackendDispatcherHandler::ExecuteSQLAsyncCallback&gt; callback = adoptRef(*new DatabaseBackendDispatcherHandler::ExecuteSQLAsyncCallback(m_backendDispatcher.copyRef(), callId));
</del><ins>+    Ref&lt;DatabaseBackendDispatcherHandler::ExecuteSQLAsyncCallback&gt; callback = adoptRef(*new DatabaseBackendDispatcherHandler::ExecuteSQLAsyncCallback(m_backendDispatcher.copyRef(), requestId));
</ins><span class="cx">     m_agent-&gt;executeSQLAsync(error, in_databaseId, in_query, callback.copyRef());
</span><span class="cx"> 
</span><span class="cx">     if (error.length()) {
</span><span class="cx">         callback-&gt;disable();
</span><del>-        m_backendDispatcher-&gt;reportProtocolError(&amp;callId, BackendDispatcher::ServerError, error);
</del><ins>+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::ServerError, error);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="lines">@@ -851,10 +845,10 @@
</span><span class="cx"> class ObjCInspectorDatabaseBackendDispatcher final : public AlternateDatabaseBackendDispatcher {
</span><span class="cx"> public:
</span><span class="cx">     ObjCInspectorDatabaseBackendDispatcher(id&lt;RWIProtocolDatabaseDomainHandler&gt; handler) { m_delegate = handler; }
</span><del>-    virtual void executeSQLSyncOptionalReturnValues(long callId, int in_databaseId, const String&amp; in_query) override;
-    virtual void executeSQLAsyncOptionalReturnValues(long callId, int in_databaseId, const String&amp; in_query) override;
-    virtual void executeSQLSync(long callId, int in_databaseId, const String&amp; in_query) override;
-    virtual void executeSQLAsync(long callId, int in_databaseId, const String&amp; in_query) override;
</del><ins>+    virtual void executeSQLSyncOptionalReturnValues(long requestId, int in_databaseId, const String&amp; in_query) override;
+    virtual void executeSQLAsyncOptionalReturnValues(long requestId, int in_databaseId, const String&amp; in_query) override;
+    virtual void executeSQLSync(long requestId, int in_databaseId, const String&amp; in_query) override;
+    virtual void executeSQLAsync(long requestId, int in_databaseId, const String&amp; in_query) override;
</ins><span class="cx"> private:
</span><span class="cx">     RetainPtr&lt;id&lt;RWIProtocolDatabaseDomainHandler&gt;&gt; m_delegate;
</span><span class="cx"> };
</span><span class="lines">@@ -1033,10 +1027,11 @@
</span><span class="cx"> 
</span><span class="cx"> namespace Inspector {
</span><span class="cx"> 
</span><del>-void ObjCInspectorDatabaseBackendDispatcher::executeSQLSyncOptionalReturnValues(long callId, int in_databaseId, const String&amp; in_query)
</del><ins>+void ObjCInspectorDatabaseBackendDispatcher::executeSQLSyncOptionalReturnValues(long requestId, int in_databaseId, const String&amp; in_query)
</ins><span class="cx"> {
</span><span class="cx">     id errorCallback = ^(NSString *error) {
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), error);
</del><ins>+        backendDispatcher()-&gt;reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+        backendDispatcher()-&gt;sendPendingErrors();
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     id successCallback = ^(NSArray/*&lt;NSString&gt;*/ **columnNames, NSString **notes, double *timestamp, RWIProtocolJSONObject **values, RWIProtocolJSONObject **payload, int *databaseId, RWIProtocolDatabaseError **sqlError, RWIProtocolDatabasePrimaryColors *screenColor, NSArray/*&lt;NSString&gt;*/ **alternateColors, RWIProtocolDatabaseExecuteSQLSyncOptionalReturnValuesPrintColor *printColor) {
</span><span class="lines">@@ -1067,7 +1062,7 @@
</span><span class="cx">             resultObject-&gt;setArray(ASCIILiteral(&quot;alternateColors&quot;), inspectorStringArray(*alternateColors));
</span><span class="cx">         if (printColor)
</span><span class="cx">             resultObject-&gt;setString(ASCIILiteral(&quot;printColor&quot;), toProtocolString(*printColor));
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, WTF::move(resultObject), String());
</del><ins>+        backendDispatcher()-&gt;sendResponse(requestId, WTF::move(resultObject));
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     int o_in_databaseId = in_databaseId;
</span><span class="lines">@@ -1076,10 +1071,11 @@
</span><span class="cx">     [m_delegate executeSQLSyncOptionalReturnValuesWithErrorCallback:errorCallback successCallback:successCallback databaseId:o_in_databaseId query:o_in_query];
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ObjCInspectorDatabaseBackendDispatcher::executeSQLAsyncOptionalReturnValues(long callId, int in_databaseId, const String&amp; in_query)
</del><ins>+void ObjCInspectorDatabaseBackendDispatcher::executeSQLAsyncOptionalReturnValues(long requestId, int in_databaseId, const String&amp; in_query)
</ins><span class="cx"> {
</span><span class="cx">     id errorCallback = ^(NSString *error) {
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), error);
</del><ins>+        backendDispatcher()-&gt;reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+        backendDispatcher()-&gt;sendPendingErrors();
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     id successCallback = ^(NSArray/*&lt;NSString&gt;*/ **columnNames, NSString **notes, double *timestamp, RWIProtocolJSONObject **values, RWIProtocolJSONObject **payload, int *databaseId, RWIProtocolDatabaseError **sqlError, RWIProtocolDatabasePrimaryColors *screenColor, NSArray/*&lt;NSString&gt;*/ **alternateColors, RWIProtocolDatabaseExecuteSQLAsyncOptionalReturnValuesPrintColor *printColor) {
</span><span class="lines">@@ -1110,7 +1106,7 @@
</span><span class="cx">             resultObject-&gt;setArray(ASCIILiteral(&quot;alternateColors&quot;), inspectorStringArray(*alternateColors));
</span><span class="cx">         if (printColor)
</span><span class="cx">             resultObject-&gt;setString(ASCIILiteral(&quot;printColor&quot;), toProtocolString(*printColor));
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, WTF::move(resultObject), String());
</del><ins>+        backendDispatcher()-&gt;sendResponse(requestId, WTF::move(resultObject));
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     int o_in_databaseId = in_databaseId;
</span><span class="lines">@@ -1119,10 +1115,11 @@
</span><span class="cx">     [m_delegate executeSQLAsyncOptionalReturnValuesWithErrorCallback:errorCallback successCallback:successCallback databaseId:o_in_databaseId query:o_in_query];
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ObjCInspectorDatabaseBackendDispatcher::executeSQLSync(long callId, int in_databaseId, const String&amp; in_query)
</del><ins>+void ObjCInspectorDatabaseBackendDispatcher::executeSQLSync(long requestId, int in_databaseId, const String&amp; in_query)
</ins><span class="cx"> {
</span><span class="cx">     id errorCallback = ^(NSString *error) {
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), error);
</del><ins>+        backendDispatcher()-&gt;reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+        backendDispatcher()-&gt;sendPendingErrors();
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     id successCallback = ^(NSArray/*&lt;NSString&gt;*/ *columnNames, NSString *notes, double timestamp, RWIProtocolJSONObject *values, RWIProtocolJSONObject *payload, int databaseId, RWIProtocolDatabaseError *sqlError, NSArray/*&lt;NSString&gt;*/ *alternateColors, RWIProtocolDatabasePrimaryColors screenColor, RWIProtocolDatabaseExecuteSQLSyncPrintColor printColor) {
</span><span class="lines">@@ -1143,7 +1140,7 @@
</span><span class="cx">         resultObject-&gt;setArray(ASCIILiteral(&quot;alternateColors&quot;), inspectorStringArray(alternateColors));
</span><span class="cx">         resultObject-&gt;setString(ASCIILiteral(&quot;screenColor&quot;), toProtocolString(screenColor));
</span><span class="cx">         resultObject-&gt;setString(ASCIILiteral(&quot;printColor&quot;), toProtocolString(printColor));
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, WTF::move(resultObject), String());
</del><ins>+        backendDispatcher()-&gt;sendResponse(requestId, WTF::move(resultObject));
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     int o_in_databaseId = in_databaseId;
</span><span class="lines">@@ -1152,10 +1149,11 @@
</span><span class="cx">     [m_delegate executeSQLSyncWithErrorCallback:errorCallback successCallback:successCallback databaseId:o_in_databaseId query:o_in_query];
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ObjCInspectorDatabaseBackendDispatcher::executeSQLAsync(long callId, int in_databaseId, const String&amp; in_query)
</del><ins>+void ObjCInspectorDatabaseBackendDispatcher::executeSQLAsync(long requestId, int in_databaseId, const String&amp; in_query)
</ins><span class="cx"> {
</span><span class="cx">     id errorCallback = ^(NSString *error) {
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), error);
</del><ins>+        backendDispatcher()-&gt;reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+        backendDispatcher()-&gt;sendPendingErrors();
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     id successCallback = ^(NSArray/*&lt;NSString&gt;*/ *columnNames, NSString *notes, double timestamp, RWIProtocolJSONObject *values, RWIProtocolJSONObject *payload, int databaseId, RWIProtocolDatabaseError *sqlError, RWIProtocolDatabasePrimaryColors screenColor, NSArray/*&lt;NSString&gt;*/ *alternateColors, RWIProtocolDatabaseExecuteSQLAsyncPrintColor printColor) {
</span><span class="lines">@@ -1176,7 +1174,7 @@
</span><span class="cx">         resultObject-&gt;setString(ASCIILiteral(&quot;screenColor&quot;), toProtocolString(screenColor));
</span><span class="cx">         resultObject-&gt;setArray(ASCIILiteral(&quot;alternateColors&quot;), inspectorStringArray(alternateColors));
</span><span class="cx">         resultObject-&gt;setString(ASCIILiteral(&quot;printColor&quot;), toProtocolString(printColor));
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, WTF::move(resultObject), String());
</del><ins>+        backendDispatcher()-&gt;sendResponse(requestId, WTF::move(resultObject));
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     int o_in_databaseId = in_databaseId;
</span></span></pre></div>
<a id="branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpectedcommandswithoptionalcallreturnparametersjsonresult"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/commands-with-optional-call-return-parameters.json-result (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/commands-with-optional-call-return-parameters.json-result        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/commands-with-optional-call-return-parameters.json-result        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -170,10 +170,10 @@
</span><span class="cx"> class DatabaseBackendDispatcher final : public SupplementalBackendDispatcher {
</span><span class="cx"> public:
</span><span class="cx">     static Ref&lt;DatabaseBackendDispatcher&gt; create(BackendDispatcher*, DatabaseBackendDispatcherHandler*);
</span><del>-    virtual void dispatch(long callId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message) override;
</del><ins>+    virtual void dispatch(long requestId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message) override;
</ins><span class="cx"> private:
</span><del>-    void executeAllOptionalParameters(long callId, const InspectorObject&amp; message);
-    void executeNoOptionalParameters(long callId, const InspectorObject&amp; message);
</del><ins>+    void executeAllOptionalParameters(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; parameters);
+    void executeNoOptionalParameters(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; parameters);
</ins><span class="cx"> private:
</span><span class="cx">     DatabaseBackendDispatcher(BackendDispatcher&amp;, DatabaseBackendDispatcherHandler*);
</span><span class="cx">     DatabaseBackendDispatcherHandler* m_agent;
</span><span class="lines">@@ -226,6 +226,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &lt;inspector/InspectorFrontendChannel.h&gt;
</span><span class="cx"> #include &lt;inspector/InspectorValues.h&gt;
</span><ins>+#include &lt;wtf/NeverDestroyed.h&gt;
</ins><span class="cx"> #include &lt;wtf/text/CString.h&gt;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="lines">@@ -251,52 +252,51 @@
</span><span class="cx">     m_backendDispatcher-&gt;registerDispatcherForDomain(ASCIILiteral(&quot;Database&quot;), this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void DatabaseBackendDispatcher::dispatch(long callId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message)
</del><ins>+void DatabaseBackendDispatcher::dispatch(long requestId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message)
</ins><span class="cx"> {
</span><span class="cx">     Ref&lt;DatabaseBackendDispatcher&gt; protect(*this);
</span><span class="cx"> 
</span><ins>+    RefPtr&lt;InspectorObject&gt; parameters;
+    message-&gt;getObject(ASCIILiteral(&quot;params&quot;), parameters);
+
</ins><span class="cx">     if (method == &quot;executeAllOptionalParameters&quot;)
</span><del>-        executeAllOptionalParameters(callId, message);
</del><ins>+        executeAllOptionalParameters(requestId, WTF::move(parameters));
</ins><span class="cx">     else if (method == &quot;executeNoOptionalParameters&quot;)
</span><del>-        executeNoOptionalParameters(callId, message);
</del><ins>+        executeNoOptionalParameters(requestId, WTF::move(parameters));
</ins><span class="cx">     else
</span><del>-        m_backendDispatcher-&gt;reportProtocolError(&amp;callId, BackendDispatcher::MethodNotFound, makeString('\'', &quot;Database&quot;, '.', method, &quot;' was not found&quot;));
</del><ins>+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::MethodNotFound, makeString('\'', &quot;Database&quot;, '.', method, &quot;' was not found&quot;));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void DatabaseBackendDispatcher::executeAllOptionalParameters(long callId, const InspectorObject&amp; message)
</del><ins>+void DatabaseBackendDispatcher::executeAllOptionalParameters(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; parameters)
</ins><span class="cx"> {
</span><del>-    auto protocolErrors = Inspector::Protocol::Array&lt;String&gt;::create();
-    RefPtr&lt;InspectorObject&gt; paramsContainer;
-    message.getObject(ASCIILiteral(&quot;params&quot;), paramsContainer);
</del><span class="cx">     bool opt_in_columnNames_valueFound = false;
</span><del>-    RefPtr&lt;Inspector::InspectorArray&gt; opt_in_columnNames = BackendDispatcher::getArray(paramsContainer.get(), ASCIILiteral(&quot;columnNames&quot;), &amp;opt_in_columnNames_valueFound, protocolErrors.get());
</del><ins>+    RefPtr&lt;Inspector::InspectorArray&gt; opt_in_columnNames = m_backendDispatcher-&gt;getArray(parameters.get(), ASCIILiteral(&quot;columnNames&quot;), &amp;opt_in_columnNames_valueFound);
</ins><span class="cx">     bool opt_in_notes_valueFound = false;
</span><del>-    String opt_in_notes = BackendDispatcher::getString(paramsContainer.get(), ASCIILiteral(&quot;notes&quot;), &amp;opt_in_notes_valueFound, protocolErrors.get());
</del><ins>+    String opt_in_notes = m_backendDispatcher-&gt;getString(parameters.get(), ASCIILiteral(&quot;notes&quot;), &amp;opt_in_notes_valueFound);
</ins><span class="cx">     bool opt_in_timestamp_valueFound = false;
</span><del>-    Inspector::Protocol::OptOutput&lt;double&gt; opt_in_timestamp = BackendDispatcher::getDouble(paramsContainer.get(), ASCIILiteral(&quot;timestamp&quot;), &amp;opt_in_timestamp_valueFound, protocolErrors.get());
</del><ins>+    Inspector::Protocol::OptOutput&lt;double&gt; opt_in_timestamp = m_backendDispatcher-&gt;getDouble(parameters.get(), ASCIILiteral(&quot;timestamp&quot;), &amp;opt_in_timestamp_valueFound);
</ins><span class="cx">     bool opt_in_values_valueFound = false;
</span><del>-    RefPtr&lt;Inspector::InspectorObject&gt; opt_in_values = BackendDispatcher::getObject(paramsContainer.get(), ASCIILiteral(&quot;values&quot;), &amp;opt_in_values_valueFound, protocolErrors.get());
</del><ins>+    RefPtr&lt;Inspector::InspectorObject&gt; opt_in_values = m_backendDispatcher-&gt;getObject(parameters.get(), ASCIILiteral(&quot;values&quot;), &amp;opt_in_values_valueFound);
</ins><span class="cx">     bool opt_in_payload_valueFound = false;
</span><del>-    RefPtr&lt;Inspector::InspectorValue&gt; opt_in_payload = BackendDispatcher::getValue(paramsContainer.get(), ASCIILiteral(&quot;payload&quot;), &amp;opt_in_payload_valueFound, protocolErrors.get());
</del><ins>+    RefPtr&lt;Inspector::InspectorValue&gt; opt_in_payload = m_backendDispatcher-&gt;getValue(parameters.get(), ASCIILiteral(&quot;payload&quot;), &amp;opt_in_payload_valueFound);
</ins><span class="cx">     bool opt_in_databaseId_valueFound = false;
</span><del>-    int opt_in_databaseId = BackendDispatcher::getInteger(paramsContainer.get(), ASCIILiteral(&quot;databaseId&quot;), &amp;opt_in_databaseId_valueFound, protocolErrors.get());
</del><ins>+    int opt_in_databaseId = m_backendDispatcher-&gt;getInteger(parameters.get(), ASCIILiteral(&quot;databaseId&quot;), &amp;opt_in_databaseId_valueFound);
</ins><span class="cx">     bool opt_in_sqlError_valueFound = false;
</span><del>-    RefPtr&lt;Inspector::InspectorObject&gt; opt_in_sqlError = BackendDispatcher::getObject(paramsContainer.get(), ASCIILiteral(&quot;sqlError&quot;), &amp;opt_in_sqlError_valueFound, protocolErrors.get());
</del><ins>+    RefPtr&lt;Inspector::InspectorObject&gt; opt_in_sqlError = m_backendDispatcher-&gt;getObject(parameters.get(), ASCIILiteral(&quot;sqlError&quot;), &amp;opt_in_sqlError_valueFound);
</ins><span class="cx">     bool opt_in_screenColor_valueFound = false;
</span><del>-    String opt_in_screenColor = BackendDispatcher::getString(paramsContainer.get(), ASCIILiteral(&quot;screenColor&quot;), &amp;opt_in_screenColor_valueFound, protocolErrors.get());
</del><ins>+    String opt_in_screenColor = m_backendDispatcher-&gt;getString(parameters.get(), ASCIILiteral(&quot;screenColor&quot;), &amp;opt_in_screenColor_valueFound);
</ins><span class="cx">     bool opt_in_alternateColors_valueFound = false;
</span><del>-    RefPtr&lt;Inspector::InspectorArray&gt; opt_in_alternateColors = BackendDispatcher::getArray(paramsContainer.get(), ASCIILiteral(&quot;alternateColors&quot;), &amp;opt_in_alternateColors_valueFound, protocolErrors.get());
</del><ins>+    RefPtr&lt;Inspector::InspectorArray&gt; opt_in_alternateColors = m_backendDispatcher-&gt;getArray(parameters.get(), ASCIILiteral(&quot;alternateColors&quot;), &amp;opt_in_alternateColors_valueFound);
</ins><span class="cx">     bool opt_in_printColor_valueFound = false;
</span><del>-    String opt_in_printColor = BackendDispatcher::getString(paramsContainer.get(), ASCIILiteral(&quot;printColor&quot;), &amp;opt_in_printColor_valueFound, protocolErrors.get());
-    if (protocolErrors-&gt;length()) {
-        String errorMessage = String::format(&quot;Some arguments of method '%s' can't be processed&quot;, &quot;Database.executeAllOptionalParameters&quot;);
-        m_backendDispatcher-&gt;reportProtocolError(&amp;callId, BackendDispatcher::InvalidParams, errorMessage, WTF::move(protocolErrors));
</del><ins>+    String opt_in_printColor = m_backendDispatcher-&gt;getString(parameters.get(), ASCIILiteral(&quot;printColor&quot;), &amp;opt_in_printColor_valueFound);
+    if (m_backendDispatcher-&gt;hasProtocolErrors()) {
+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::InvalidParams, String::format(&quot;Some arguments of method '%s' can't be processed&quot;, &quot;Database.executeAllOptionalParameters&quot;));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx">     if (m_alternateDispatcher) {
</span><del>-        m_alternateDispatcher-&gt;executeAllOptionalParameters(callId, opt_in_columnNames_valueFound ? opt_in_columnNames.get() : nullptr, opt_in_notes_valueFound ? &amp;opt_in_notes : nullptr, opt_in_timestamp_valueFound ? &amp;opt_in_timestamp : nullptr, opt_in_values_valueFound ? opt_in_values.get() : nullptr, opt_in_payload_valueFound ? opt_in_payload.get() : nullptr, opt_in_databaseId_valueFound ? &amp;opt_in_databaseId : nullptr, opt_in_sqlError_valueFound ? opt_in_sqlError.get() : nullptr, opt_in_screenColor_valueFound ? &amp;opt_in_screenColor : nullptr, opt_in_alternateColors_valueFound ? opt_in_alternateColors.get() : nullptr, opt_in_printColor_valueFound ? &amp;opt_in_printColor : nullptr);
</del><ins>+        m_alternateDispatcher-&gt;executeAllOptionalParameters(requestId, opt_in_columnNames_valueFound ? opt_in_columnNames.get() : nullptr, opt_in_notes_valueFound ? &amp;opt_in_notes : nullptr, opt_in_timestamp_valueFound ? &amp;opt_in_timestamp : nullptr, opt_in_values_valueFound ? opt_in_values.get() : nullptr, opt_in_payload_valueFound ? opt_in_payload.get() : nullptr, opt_in_databaseId_valueFound ? &amp;opt_in_databaseId : nullptr, opt_in_sqlError_valueFound ? opt_in_sqlError.get() : nullptr, opt_in_screenColor_valueFound ? &amp;opt_in_screenColor : nullptr, opt_in_alternateColors_valueFound ? opt_in_alternateColors.get() : nullptr, opt_in_printColor_valueFound ? &amp;opt_in_printColor : nullptr);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="lines">@@ -337,33 +337,32 @@
</span><span class="cx">         if (out_printColor.isAssigned())
</span><span class="cx">             result-&gt;setString(ASCIILiteral(&quot;printColor&quot;), out_printColor.getValue());
</span><span class="cx">     }
</span><del>-    m_backendDispatcher-&gt;sendResponse(callId, WTF::move(result), error);
</del><ins>+    if (!error.length())
+        m_backendDispatcher-&gt;sendResponse(requestId, WTF::move(result));
+    else
+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void DatabaseBackendDispatcher::executeNoOptionalParameters(long callId, const InspectorObject&amp; message)
</del><ins>+void DatabaseBackendDispatcher::executeNoOptionalParameters(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; parameters)
</ins><span class="cx"> {
</span><del>-    auto protocolErrors = Inspector::Protocol::Array&lt;String&gt;::create();
-    RefPtr&lt;InspectorObject&gt; paramsContainer;
-    message.getObject(ASCIILiteral(&quot;params&quot;), paramsContainer);
-    RefPtr&lt;Inspector::InspectorArray&gt; in_columnNames = BackendDispatcher::getArray(paramsContainer.get(), ASCIILiteral(&quot;columnNames&quot;), nullptr, protocolErrors.get());
-    String in_notes = BackendDispatcher::getString(paramsContainer.get(), ASCIILiteral(&quot;notes&quot;), nullptr, protocolErrors.get());
-    double in_timestamp = BackendDispatcher::getDouble(paramsContainer.get(), ASCIILiteral(&quot;timestamp&quot;), nullptr, protocolErrors.get());
-    RefPtr&lt;Inspector::InspectorObject&gt; in_values = BackendDispatcher::getObject(paramsContainer.get(), ASCIILiteral(&quot;values&quot;), nullptr, protocolErrors.get());
-    RefPtr&lt;Inspector::InspectorValue&gt; in_payload = BackendDispatcher::getValue(paramsContainer.get(), ASCIILiteral(&quot;payload&quot;), nullptr, protocolErrors.get());
-    int in_databaseId = BackendDispatcher::getInteger(paramsContainer.get(), ASCIILiteral(&quot;databaseId&quot;), nullptr, protocolErrors.get());
-    RefPtr&lt;Inspector::InspectorObject&gt; in_sqlError = BackendDispatcher::getObject(paramsContainer.get(), ASCIILiteral(&quot;sqlError&quot;), nullptr, protocolErrors.get());
-    String in_screenColor = BackendDispatcher::getString(paramsContainer.get(), ASCIILiteral(&quot;screenColor&quot;), nullptr, protocolErrors.get());
-    RefPtr&lt;Inspector::InspectorArray&gt; in_alternateColors = BackendDispatcher::getArray(paramsContainer.get(), ASCIILiteral(&quot;alternateColors&quot;), nullptr, protocolErrors.get());
-    String in_printColor = BackendDispatcher::getString(paramsContainer.get(), ASCIILiteral(&quot;printColor&quot;), nullptr, protocolErrors.get());
-    if (protocolErrors-&gt;length()) {
-        String errorMessage = String::format(&quot;Some arguments of method '%s' can't be processed&quot;, &quot;Database.executeNoOptionalParameters&quot;);
-        m_backendDispatcher-&gt;reportProtocolError(&amp;callId, BackendDispatcher::InvalidParams, errorMessage, WTF::move(protocolErrors));
</del><ins>+    RefPtr&lt;Inspector::InspectorArray&gt; in_columnNames = m_backendDispatcher-&gt;getArray(parameters.get(), ASCIILiteral(&quot;columnNames&quot;), nullptr);
+    String in_notes = m_backendDispatcher-&gt;getString(parameters.get(), ASCIILiteral(&quot;notes&quot;), nullptr);
+    double in_timestamp = m_backendDispatcher-&gt;getDouble(parameters.get(), ASCIILiteral(&quot;timestamp&quot;), nullptr);
+    RefPtr&lt;Inspector::InspectorObject&gt; in_values = m_backendDispatcher-&gt;getObject(parameters.get(), ASCIILiteral(&quot;values&quot;), nullptr);
+    RefPtr&lt;Inspector::InspectorValue&gt; in_payload = m_backendDispatcher-&gt;getValue(parameters.get(), ASCIILiteral(&quot;payload&quot;), nullptr);
+    int in_databaseId = m_backendDispatcher-&gt;getInteger(parameters.get(), ASCIILiteral(&quot;databaseId&quot;), nullptr);
+    RefPtr&lt;Inspector::InspectorObject&gt; in_sqlError = m_backendDispatcher-&gt;getObject(parameters.get(), ASCIILiteral(&quot;sqlError&quot;), nullptr);
+    String in_screenColor = m_backendDispatcher-&gt;getString(parameters.get(), ASCIILiteral(&quot;screenColor&quot;), nullptr);
+    RefPtr&lt;Inspector::InspectorArray&gt; in_alternateColors = m_backendDispatcher-&gt;getArray(parameters.get(), ASCIILiteral(&quot;alternateColors&quot;), nullptr);
+    String in_printColor = m_backendDispatcher-&gt;getString(parameters.get(), ASCIILiteral(&quot;printColor&quot;), nullptr);
+    if (m_backendDispatcher-&gt;hasProtocolErrors()) {
+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::InvalidParams, String::format(&quot;Some arguments of method '%s' can't be processed&quot;, &quot;Database.executeNoOptionalParameters&quot;));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx">     if (m_alternateDispatcher) {
</span><del>-        m_alternateDispatcher-&gt;executeNoOptionalParameters(callId, *in_columnNames, in_notes, in_timestamp, *in_values, *in_payload, in_databaseId, *in_sqlError, in_screenColor, *in_alternateColors, in_printColor);
</del><ins>+        m_alternateDispatcher-&gt;executeNoOptionalParameters(requestId, *in_columnNames, in_notes, in_timestamp, *in_values, *in_payload, in_databaseId, *in_sqlError, in_screenColor, *in_alternateColors, in_printColor);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="lines">@@ -394,7 +393,10 @@
</span><span class="cx">         result-&gt;setArray(ASCIILiteral(&quot;alternateColors&quot;), out_alternateColors);
</span><span class="cx">         result-&gt;setString(ASCIILiteral(&quot;printColor&quot;), Inspector::Protocol::getEnumConstantValue(out_printColor));
</span><span class="cx">     }
</span><del>-    m_backendDispatcher-&gt;sendResponse(callId, WTF::move(result), error);
</del><ins>+    if (!error.length())
+        m_backendDispatcher-&gt;sendResponse(requestId, WTF::move(result));
+    else
+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace Inspector
</span><span class="lines">@@ -744,8 +746,8 @@
</span><span class="cx"> class ObjCInspectorDatabaseBackendDispatcher final : public AlternateDatabaseBackendDispatcher {
</span><span class="cx"> public:
</span><span class="cx">     ObjCInspectorDatabaseBackendDispatcher(id&lt;RWIProtocolDatabaseDomainHandler&gt; handler) { m_delegate = handler; }
</span><del>-    virtual void executeAllOptionalParameters(long callId, const Inspector::InspectorArray* in_columnNames, const String* in_notes, const double* in_timestamp, const Inspector::InspectorObject* in_values, const Inspector::InspectorValue* in_payload, const int* in_databaseId, const Inspector::InspectorObject* in_sqlError, const String* in_screenColor, const Inspector::InspectorArray* in_alternateColors, const String* in_printColor) override;
-    virtual void executeNoOptionalParameters(long callId, const Inspector::InspectorArray&amp; in_columnNames, const String&amp; in_notes, double in_timestamp, const Inspector::InspectorObject&amp; in_values, Inspector::InspectorValue in_payload, int in_databaseId, const Inspector::InspectorObject&amp; in_sqlError, const String&amp; in_screenColor, const Inspector::InspectorArray&amp; in_alternateColors, const String&amp; in_printColor) override;
</del><ins>+    virtual void executeAllOptionalParameters(long requestId, const Inspector::InspectorArray* in_columnNames, const String* in_notes, const double* in_timestamp, const Inspector::InspectorObject* in_values, const Inspector::InspectorValue* in_payload, const int* in_databaseId, const Inspector::InspectorObject* in_sqlError, const String* in_screenColor, const Inspector::InspectorArray* in_alternateColors, const String* in_printColor) override;
+    virtual void executeNoOptionalParameters(long requestId, const Inspector::InspectorArray&amp; in_columnNames, const String&amp; in_notes, double in_timestamp, const Inspector::InspectorObject&amp; in_values, Inspector::InspectorValue in_payload, int in_databaseId, const Inspector::InspectorObject&amp; in_sqlError, const String&amp; in_screenColor, const Inspector::InspectorArray&amp; in_alternateColors, const String&amp; in_printColor) override;
</ins><span class="cx"> private:
</span><span class="cx">     RetainPtr&lt;id&lt;RWIProtocolDatabaseDomainHandler&gt;&gt; m_delegate;
</span><span class="cx"> };
</span><span class="lines">@@ -924,10 +926,11 @@
</span><span class="cx"> 
</span><span class="cx"> namespace Inspector {
</span><span class="cx"> 
</span><del>-void ObjCInspectorDatabaseBackendDispatcher::executeAllOptionalParameters(long callId, const Inspector::InspectorArray* in_columnNames, const String* in_notes, const double* in_timestamp, const Inspector::InspectorObject* in_values, const Inspector::InspectorValue* in_payload, const int* in_databaseId, const Inspector::InspectorObject* in_sqlError, const String* in_screenColor, const Inspector::InspectorArray* in_alternateColors, const String* in_printColor)
</del><ins>+void ObjCInspectorDatabaseBackendDispatcher::executeAllOptionalParameters(long requestId, const Inspector::InspectorArray* in_columnNames, const String* in_notes, const double* in_timestamp, const Inspector::InspectorObject* in_values, const Inspector::InspectorValue* in_payload, const int* in_databaseId, const Inspector::InspectorObject* in_sqlError, const String* in_screenColor, const Inspector::InspectorArray* in_alternateColors, const String* in_printColor)
</ins><span class="cx"> {
</span><span class="cx">     id errorCallback = ^(NSString *error) {
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), error);
</del><ins>+        backendDispatcher()-&gt;reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+        backendDispatcher()-&gt;sendPendingErrors();
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     id successCallback = ^(NSArray/*&lt;NSString&gt;*/ **columnNames, NSString **notes, double *timestamp, RWIProtocolJSONObject **values, RWIProtocolJSONObject **payload, int *databaseId, RWIProtocolDatabaseError **sqlError, RWIProtocolDatabasePrimaryColors *screenColor, NSArray/*&lt;NSString&gt;*/ **alternateColors, RWIProtocolDatabaseExecuteAllOptionalParametersPrintColor *printColor) {
</span><span class="lines">@@ -958,7 +961,7 @@
</span><span class="cx">             resultObject-&gt;setArray(ASCIILiteral(&quot;alternateColors&quot;), inspectorStringArray(*alternateColors));
</span><span class="cx">         if (printColor)
</span><span class="cx">             resultObject-&gt;setString(ASCIILiteral(&quot;printColor&quot;), toProtocolString(*printColor));
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, WTF::move(resultObject), String());
</del><ins>+        backendDispatcher()-&gt;sendResponse(requestId, WTF::move(resultObject));
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     NSArray/*&lt;NSString&gt;*/ *o_in_columnNames;
</span><span class="lines">@@ -995,10 +998,11 @@
</span><span class="cx">     [m_delegate executeAllOptionalParametersWithErrorCallback:errorCallback successCallback:successCallback columnNames:(in_columnNames ? &amp;o_in_columnNames : nil) notes:(in_notes ? &amp;o_in_notes : nil) timestamp:(in_timestamp ? &amp;o_in_timestamp : nil) values:(in_values ? &amp;o_in_values : nil) payload:(in_payload ? &amp;o_in_payload : nil) databaseId:(in_databaseId ? &amp;o_in_databaseId : nil) sqlError:(in_sqlError ? &amp;o_in_sqlError : nil) screenColor:(in_screenColor ? &amp;o_in_screenColor : nil) alternateColors:(in_alternateColors ? &amp;o_in_alternateColors : nil) printColor:(in_printColor ? &amp;o_in_printColor : nil)];
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ObjCInspectorDatabaseBackendDispatcher::executeNoOptionalParameters(long callId, const Inspector::InspectorArray&amp; in_columnNames, const String&amp; in_notes, double in_timestamp, const Inspector::InspectorObject&amp; in_values, Inspector::InspectorValue in_payload, int in_databaseId, const Inspector::InspectorObject&amp; in_sqlError, const String&amp; in_screenColor, const Inspector::InspectorArray&amp; in_alternateColors, const String&amp; in_printColor)
</del><ins>+void ObjCInspectorDatabaseBackendDispatcher::executeNoOptionalParameters(long requestId, const Inspector::InspectorArray&amp; in_columnNames, const String&amp; in_notes, double in_timestamp, const Inspector::InspectorObject&amp; in_values, Inspector::InspectorValue in_payload, int in_databaseId, const Inspector::InspectorObject&amp; in_sqlError, const String&amp; in_screenColor, const Inspector::InspectorArray&amp; in_alternateColors, const String&amp; in_printColor)
</ins><span class="cx"> {
</span><span class="cx">     id errorCallback = ^(NSString *error) {
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), error);
</del><ins>+        backendDispatcher()-&gt;reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+        backendDispatcher()-&gt;sendPendingErrors();
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     id successCallback = ^(NSArray/*&lt;NSString&gt;*/ *columnNames, NSString *notes, double timestamp, RWIProtocolJSONObject *values, RWIProtocolJSONObject *payload, int databaseId, RWIProtocolDatabaseError *sqlError, RWIProtocolDatabasePrimaryColors screenColor, NSArray/*&lt;NSString&gt;*/ *alternateColors, RWIProtocolDatabaseExecuteNoOptionalParametersPrintColor printColor) {
</span><span class="lines">@@ -1019,7 +1023,7 @@
</span><span class="cx">         resultObject-&gt;setString(ASCIILiteral(&quot;screenColor&quot;), toProtocolString(screenColor));
</span><span class="cx">         resultObject-&gt;setArray(ASCIILiteral(&quot;alternateColors&quot;), inspectorStringArray(alternateColors));
</span><span class="cx">         resultObject-&gt;setString(ASCIILiteral(&quot;printColor&quot;), toProtocolString(printColor));
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, WTF::move(resultObject), String());
</del><ins>+        backendDispatcher()-&gt;sendResponse(requestId, WTF::move(resultObject));
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     NSArray/*&lt;NSString&gt;*/ *o_in_columnNames = objcStringArray(&amp;in_columnNames);
</span></span></pre></div>
<a id="branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpecteddomainswithvaryingcommandsizesjsonresult"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/domains-with-varying-command-sizes.json-result (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/domains-with-varying-command-sizes.json-result        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/domains-with-varying-command-sizes.json-result        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -188,9 +188,9 @@
</span><span class="cx"> class Network1BackendDispatcher final : public SupplementalBackendDispatcher {
</span><span class="cx"> public:
</span><span class="cx">     static Ref&lt;Network1BackendDispatcher&gt; create(BackendDispatcher*, Network1BackendDispatcherHandler*);
</span><del>-    virtual void dispatch(long callId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message) override;
</del><ins>+    virtual void dispatch(long requestId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message) override;
</ins><span class="cx"> private:
</span><del>-    void loadResource1(long callId, const InspectorObject&amp; message);
</del><ins>+    void loadResource1(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; parameters);
</ins><span class="cx"> private:
</span><span class="cx">     Network1BackendDispatcher(BackendDispatcher&amp;, Network1BackendDispatcherHandler*);
</span><span class="cx">     Network1BackendDispatcherHandler* m_agent;
</span><span class="lines">@@ -205,15 +205,15 @@
</span><span class="cx"> class Network3BackendDispatcher final : public SupplementalBackendDispatcher {
</span><span class="cx"> public:
</span><span class="cx">     static Ref&lt;Network3BackendDispatcher&gt; create(BackendDispatcher*, Network3BackendDispatcherHandler*);
</span><del>-    virtual void dispatch(long callId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message) override;
</del><ins>+    virtual void dispatch(long requestId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message) override;
</ins><span class="cx"> private:
</span><del>-    void loadResource1(long callId, const InspectorObject&amp; message);
-    void loadResource2(long callId, const InspectorObject&amp; message);
-    void loadResource3(long callId, const InspectorObject&amp; message);
-    void loadResource4(long callId, const InspectorObject&amp; message);
-    void loadResource5(long callId, const InspectorObject&amp; message);
-    void loadResource6(long callId, const InspectorObject&amp; message);
-    void loadResource7(long callId, const InspectorObject&amp; message);
</del><ins>+    void loadResource1(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; parameters);
+    void loadResource2(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; parameters);
+    void loadResource3(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; parameters);
+    void loadResource4(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; parameters);
+    void loadResource5(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; parameters);
+    void loadResource6(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; parameters);
+    void loadResource7(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; parameters);
</ins><span class="cx"> private:
</span><span class="cx">     Network3BackendDispatcher(BackendDispatcher&amp;, Network3BackendDispatcherHandler*);
</span><span class="cx">     Network3BackendDispatcherHandler* m_agent;
</span><span class="lines">@@ -266,6 +266,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &lt;inspector/InspectorFrontendChannel.h&gt;
</span><span class="cx"> #include &lt;inspector/InspectorValues.h&gt;
</span><ins>+#include &lt;wtf/NeverDestroyed.h&gt;
</ins><span class="cx"> #include &lt;wtf/text/CString.h&gt;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="lines">@@ -292,21 +293,24 @@
</span><span class="cx">     m_backendDispatcher-&gt;registerDispatcherForDomain(ASCIILiteral(&quot;Network1&quot;), this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void Network1BackendDispatcher::dispatch(long callId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message)
</del><ins>+void Network1BackendDispatcher::dispatch(long requestId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message)
</ins><span class="cx"> {
</span><span class="cx">     Ref&lt;Network1BackendDispatcher&gt; protect(*this);
</span><span class="cx"> 
</span><ins>+    RefPtr&lt;InspectorObject&gt; parameters;
+    message-&gt;getObject(ASCIILiteral(&quot;params&quot;), parameters);
+
</ins><span class="cx">     if (method == &quot;loadResource1&quot;)
</span><del>-        loadResource1(callId, message);
</del><ins>+        loadResource1(requestId, WTF::move(parameters));
</ins><span class="cx">     else
</span><del>-        m_backendDispatcher-&gt;reportProtocolError(&amp;callId, BackendDispatcher::MethodNotFound, makeString('\'', &quot;Network1&quot;, '.', method, &quot;' was not found&quot;));
</del><ins>+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::MethodNotFound, makeString('\'', &quot;Network1&quot;, '.', method, &quot;' was not found&quot;));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void Network1BackendDispatcher::loadResource1(long callId, const InspectorObject&amp;)
</del><ins>+void Network1BackendDispatcher::loadResource1(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp;)
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx">     if (m_alternateDispatcher) {
</span><del>-        m_alternateDispatcher-&gt;loadResource1(callId);
</del><ins>+        m_alternateDispatcher-&gt;loadResource1(requestId);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="lines">@@ -315,7 +319,10 @@
</span><span class="cx">     Ref&lt;InspectorObject&gt; result = InspectorObject::create();
</span><span class="cx">     m_agent-&gt;loadResource1(error);
</span><span class="cx"> 
</span><del>-    m_backendDispatcher-&gt;sendResponse(callId, WTF::move(result), error);
</del><ins>+    if (!error.length())
+        m_backendDispatcher-&gt;sendResponse(requestId, WTF::move(result));
+    else
+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> Ref&lt;Network3BackendDispatcher&gt; Network3BackendDispatcher::create(BackendDispatcher* backendDispatcher, Network3BackendDispatcherHandler* agent)
</span><span class="lines">@@ -333,14 +340,17 @@
</span><span class="cx">     m_backendDispatcher-&gt;registerDispatcherForDomain(ASCIILiteral(&quot;Network3&quot;), this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void Network3BackendDispatcher::dispatch(long callId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message)
</del><ins>+void Network3BackendDispatcher::dispatch(long requestId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message)
</ins><span class="cx"> {
</span><span class="cx">     Ref&lt;Network3BackendDispatcher&gt; protect(*this);
</span><span class="cx"> 
</span><del>-    typedef void (Network3BackendDispatcher::*CallHandler)(long callId, const InspectorObject&amp; message);
</del><ins>+    RefPtr&lt;InspectorObject&gt; parameters;
+    message-&gt;getObject(ASCIILiteral(&quot;params&quot;), parameters);
+
+    typedef void (Network3BackendDispatcher::*CallHandler)(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; message);
</ins><span class="cx">     typedef HashMap&lt;String, CallHandler&gt; DispatchMap;
</span><del>-    DEPRECATED_DEFINE_STATIC_LOCAL(DispatchMap, dispatchMap, ());
-    if (dispatchMap.isEmpty()) {
</del><ins>+    static NeverDestroyed&lt;DispatchMap&gt; dispatchMap;
+    if (dispatchMap.get().isEmpty()) {
</ins><span class="cx">         static const struct MethodTable {
</span><span class="cx">             const char* name;
</span><span class="cx">             CallHandler handler;
</span><span class="lines">@@ -355,23 +365,23 @@
</span><span class="cx">         };
</span><span class="cx">         size_t length = WTF_ARRAY_LENGTH(commands);
</span><span class="cx">         for (size_t i = 0; i &lt; length; ++i)
</span><del>-            dispatchMap.add(commands[i].name, commands[i].handler);
</del><ins>+            dispatchMap.get().add(commands[i].name, commands[i].handler);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    HashMap&lt;String, CallHandler&gt;::iterator it = dispatchMap.find(method);
-    if (it == dispatchMap.end()) {
-        m_backendDispatcher-&gt;reportProtocolError(&amp;callId, BackendDispatcher::MethodNotFound, makeString('\'', &quot;Network3&quot;, '.', method, &quot;' was not found&quot;));
</del><ins>+    auto findResult = dispatchMap.get().find(method);
+    if (findResult == dispatchMap.get().end()) {
+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::MethodNotFound, makeString('\'', &quot;Network3&quot;, '.', method, &quot;' was not found&quot;));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ((*this).*it-&gt;value)(callId, message.get());
</del><ins>+    ((*this).*findResult-&gt;value)(requestId, WTF::move(parameters));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void Network3BackendDispatcher::loadResource1(long callId, const InspectorObject&amp;)
</del><ins>+void Network3BackendDispatcher::loadResource1(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp;)
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx">     if (m_alternateDispatcher) {
</span><del>-        m_alternateDispatcher-&gt;loadResource1(callId);
</del><ins>+        m_alternateDispatcher-&gt;loadResource1(requestId);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="lines">@@ -380,14 +390,17 @@
</span><span class="cx">     Ref&lt;InspectorObject&gt; result = InspectorObject::create();
</span><span class="cx">     m_agent-&gt;loadResource1(error);
</span><span class="cx"> 
</span><del>-    m_backendDispatcher-&gt;sendResponse(callId, WTF::move(result), error);
</del><ins>+    if (!error.length())
+        m_backendDispatcher-&gt;sendResponse(requestId, WTF::move(result));
+    else
+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void Network3BackendDispatcher::loadResource2(long callId, const InspectorObject&amp;)
</del><ins>+void Network3BackendDispatcher::loadResource2(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp;)
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx">     if (m_alternateDispatcher) {
</span><del>-        m_alternateDispatcher-&gt;loadResource2(callId);
</del><ins>+        m_alternateDispatcher-&gt;loadResource2(requestId);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="lines">@@ -396,14 +409,17 @@
</span><span class="cx">     Ref&lt;InspectorObject&gt; result = InspectorObject::create();
</span><span class="cx">     m_agent-&gt;loadResource2(error);
</span><span class="cx"> 
</span><del>-    m_backendDispatcher-&gt;sendResponse(callId, WTF::move(result), error);
</del><ins>+    if (!error.length())
+        m_backendDispatcher-&gt;sendResponse(requestId, WTF::move(result));
+    else
+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void Network3BackendDispatcher::loadResource3(long callId, const InspectorObject&amp;)
</del><ins>+void Network3BackendDispatcher::loadResource3(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp;)
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx">     if (m_alternateDispatcher) {
</span><del>-        m_alternateDispatcher-&gt;loadResource3(callId);
</del><ins>+        m_alternateDispatcher-&gt;loadResource3(requestId);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="lines">@@ -412,14 +428,17 @@
</span><span class="cx">     Ref&lt;InspectorObject&gt; result = InspectorObject::create();
</span><span class="cx">     m_agent-&gt;loadResource3(error);
</span><span class="cx"> 
</span><del>-    m_backendDispatcher-&gt;sendResponse(callId, WTF::move(result), error);
</del><ins>+    if (!error.length())
+        m_backendDispatcher-&gt;sendResponse(requestId, WTF::move(result));
+    else
+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void Network3BackendDispatcher::loadResource4(long callId, const InspectorObject&amp;)
</del><ins>+void Network3BackendDispatcher::loadResource4(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp;)
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx">     if (m_alternateDispatcher) {
</span><del>-        m_alternateDispatcher-&gt;loadResource4(callId);
</del><ins>+        m_alternateDispatcher-&gt;loadResource4(requestId);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="lines">@@ -428,14 +447,17 @@
</span><span class="cx">     Ref&lt;InspectorObject&gt; result = InspectorObject::create();
</span><span class="cx">     m_agent-&gt;loadResource4(error);
</span><span class="cx"> 
</span><del>-    m_backendDispatcher-&gt;sendResponse(callId, WTF::move(result), error);
</del><ins>+    if (!error.length())
+        m_backendDispatcher-&gt;sendResponse(requestId, WTF::move(result));
+    else
+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void Network3BackendDispatcher::loadResource5(long callId, const InspectorObject&amp;)
</del><ins>+void Network3BackendDispatcher::loadResource5(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp;)
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx">     if (m_alternateDispatcher) {
</span><del>-        m_alternateDispatcher-&gt;loadResource5(callId);
</del><ins>+        m_alternateDispatcher-&gt;loadResource5(requestId);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="lines">@@ -444,14 +466,17 @@
</span><span class="cx">     Ref&lt;InspectorObject&gt; result = InspectorObject::create();
</span><span class="cx">     m_agent-&gt;loadResource5(error);
</span><span class="cx"> 
</span><del>-    m_backendDispatcher-&gt;sendResponse(callId, WTF::move(result), error);
</del><ins>+    if (!error.length())
+        m_backendDispatcher-&gt;sendResponse(requestId, WTF::move(result));
+    else
+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void Network3BackendDispatcher::loadResource6(long callId, const InspectorObject&amp;)
</del><ins>+void Network3BackendDispatcher::loadResource6(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp;)
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx">     if (m_alternateDispatcher) {
</span><del>-        m_alternateDispatcher-&gt;loadResource6(callId);
</del><ins>+        m_alternateDispatcher-&gt;loadResource6(requestId);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="lines">@@ -460,14 +485,17 @@
</span><span class="cx">     Ref&lt;InspectorObject&gt; result = InspectorObject::create();
</span><span class="cx">     m_agent-&gt;loadResource6(error);
</span><span class="cx"> 
</span><del>-    m_backendDispatcher-&gt;sendResponse(callId, WTF::move(result), error);
</del><ins>+    if (!error.length())
+        m_backendDispatcher-&gt;sendResponse(requestId, WTF::move(result));
+    else
+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void Network3BackendDispatcher::loadResource7(long callId, const InspectorObject&amp;)
</del><ins>+void Network3BackendDispatcher::loadResource7(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp;)
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx">     if (m_alternateDispatcher) {
</span><del>-        m_alternateDispatcher-&gt;loadResource7(callId);
</del><ins>+        m_alternateDispatcher-&gt;loadResource7(requestId);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="lines">@@ -476,7 +504,10 @@
</span><span class="cx">     Ref&lt;InspectorObject&gt; result = InspectorObject::create();
</span><span class="cx">     m_agent-&gt;loadResource7(error);
</span><span class="cx"> 
</span><del>-    m_backendDispatcher-&gt;sendResponse(callId, WTF::move(result), error);
</del><ins>+    if (!error.length())
+        m_backendDispatcher-&gt;sendResponse(requestId, WTF::move(result));
+    else
+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace Inspector
</span><span class="lines">@@ -739,7 +770,7 @@
</span><span class="cx"> class ObjCInspectorNetwork1BackendDispatcher final : public AlternateNetwork1BackendDispatcher {
</span><span class="cx"> public:
</span><span class="cx">     ObjCInspectorNetwork1BackendDispatcher(id&lt;RWIProtocolNetwork1DomainHandler&gt; handler) { m_delegate = handler; }
</span><del>-    virtual void loadResource1(long callId) override;
</del><ins>+    virtual void loadResource1(long requestId) override;
</ins><span class="cx"> private:
</span><span class="cx">     RetainPtr&lt;id&lt;RWIProtocolNetwork1DomainHandler&gt;&gt; m_delegate;
</span><span class="cx"> };
</span><span class="lines">@@ -749,13 +780,13 @@
</span><span class="cx"> class ObjCInspectorNetwork3BackendDispatcher final : public AlternateNetwork3BackendDispatcher {
</span><span class="cx"> public:
</span><span class="cx">     ObjCInspectorNetwork3BackendDispatcher(id&lt;RWIProtocolNetwork3DomainHandler&gt; handler) { m_delegate = handler; }
</span><del>-    virtual void loadResource1(long callId) override;
-    virtual void loadResource2(long callId) override;
-    virtual void loadResource3(long callId) override;
-    virtual void loadResource4(long callId) override;
-    virtual void loadResource5(long callId) override;
-    virtual void loadResource6(long callId) override;
-    virtual void loadResource7(long callId) override;
</del><ins>+    virtual void loadResource1(long requestId) override;
+    virtual void loadResource2(long requestId) override;
+    virtual void loadResource3(long requestId) override;
+    virtual void loadResource4(long requestId) override;
+    virtual void loadResource5(long requestId) override;
+    virtual void loadResource6(long requestId) override;
+    virtual void loadResource7(long requestId) override;
</ins><span class="cx"> private:
</span><span class="cx">     RetainPtr&lt;id&lt;RWIProtocolNetwork3DomainHandler&gt;&gt; m_delegate;
</span><span class="cx"> };
</span><span class="lines">@@ -955,14 +986,15 @@
</span><span class="cx"> 
</span><span class="cx"> namespace Inspector {
</span><span class="cx"> 
</span><del>-void ObjCInspectorNetwork1BackendDispatcher::loadResource1(long callId)
</del><ins>+void ObjCInspectorNetwork1BackendDispatcher::loadResource1(long requestId)
</ins><span class="cx"> {
</span><span class="cx">     id errorCallback = ^(NSString *error) {
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), error);
</del><ins>+        backendDispatcher()-&gt;reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+        backendDispatcher()-&gt;sendPendingErrors();
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     id successCallback = ^{
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), String());
</del><ins>+        backendDispatcher()-&gt;sendResponse(requestId, InspectorObject::create());
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     [m_delegate loadResource1WithErrorCallback:errorCallback successCallback:successCallback];
</span><span class="lines">@@ -971,92 +1003,99 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-void ObjCInspectorNetwork3BackendDispatcher::loadResource1(long callId)
</del><ins>+void ObjCInspectorNetwork3BackendDispatcher::loadResource1(long requestId)
</ins><span class="cx"> {
</span><span class="cx">     id errorCallback = ^(NSString *error) {
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), error);
</del><ins>+        backendDispatcher()-&gt;reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+        backendDispatcher()-&gt;sendPendingErrors();
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     id successCallback = ^{
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), String());
</del><ins>+        backendDispatcher()-&gt;sendResponse(requestId, InspectorObject::create());
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     [m_delegate loadResource1WithErrorCallback:errorCallback successCallback:successCallback];
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ObjCInspectorNetwork3BackendDispatcher::loadResource2(long callId)
</del><ins>+void ObjCInspectorNetwork3BackendDispatcher::loadResource2(long requestId)
</ins><span class="cx"> {
</span><span class="cx">     id errorCallback = ^(NSString *error) {
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), error);
</del><ins>+        backendDispatcher()-&gt;reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+        backendDispatcher()-&gt;sendPendingErrors();
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     id successCallback = ^{
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), String());
</del><ins>+        backendDispatcher()-&gt;sendResponse(requestId, InspectorObject::create());
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     [m_delegate loadResource2WithErrorCallback:errorCallback successCallback:successCallback];
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ObjCInspectorNetwork3BackendDispatcher::loadResource3(long callId)
</del><ins>+void ObjCInspectorNetwork3BackendDispatcher::loadResource3(long requestId)
</ins><span class="cx"> {
</span><span class="cx">     id errorCallback = ^(NSString *error) {
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), error);
</del><ins>+        backendDispatcher()-&gt;reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+        backendDispatcher()-&gt;sendPendingErrors();
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     id successCallback = ^{
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), String());
</del><ins>+        backendDispatcher()-&gt;sendResponse(requestId, InspectorObject::create());
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     [m_delegate loadResource3WithErrorCallback:errorCallback successCallback:successCallback];
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ObjCInspectorNetwork3BackendDispatcher::loadResource4(long callId)
</del><ins>+void ObjCInspectorNetwork3BackendDispatcher::loadResource4(long requestId)
</ins><span class="cx"> {
</span><span class="cx">     id errorCallback = ^(NSString *error) {
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), error);
</del><ins>+        backendDispatcher()-&gt;reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+        backendDispatcher()-&gt;sendPendingErrors();
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     id successCallback = ^{
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), String());
</del><ins>+        backendDispatcher()-&gt;sendResponse(requestId, InspectorObject::create());
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     [m_delegate loadResource4WithErrorCallback:errorCallback successCallback:successCallback];
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ObjCInspectorNetwork3BackendDispatcher::loadResource5(long callId)
</del><ins>+void ObjCInspectorNetwork3BackendDispatcher::loadResource5(long requestId)
</ins><span class="cx"> {
</span><span class="cx">     id errorCallback = ^(NSString *error) {
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), error);
</del><ins>+        backendDispatcher()-&gt;reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+        backendDispatcher()-&gt;sendPendingErrors();
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     id successCallback = ^{
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), String());
</del><ins>+        backendDispatcher()-&gt;sendResponse(requestId, InspectorObject::create());
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     [m_delegate loadResource5WithErrorCallback:errorCallback successCallback:successCallback];
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ObjCInspectorNetwork3BackendDispatcher::loadResource6(long callId)
</del><ins>+void ObjCInspectorNetwork3BackendDispatcher::loadResource6(long requestId)
</ins><span class="cx"> {
</span><span class="cx">     id errorCallback = ^(NSString *error) {
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), error);
</del><ins>+        backendDispatcher()-&gt;reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+        backendDispatcher()-&gt;sendPendingErrors();
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     id successCallback = ^{
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), String());
</del><ins>+        backendDispatcher()-&gt;sendResponse(requestId, InspectorObject::create());
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     [m_delegate loadResource6WithErrorCallback:errorCallback successCallback:successCallback];
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ObjCInspectorNetwork3BackendDispatcher::loadResource7(long callId)
</del><ins>+void ObjCInspectorNetwork3BackendDispatcher::loadResource7(long requestId)
</ins><span class="cx"> {
</span><span class="cx">     id errorCallback = ^(NSString *error) {
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), error);
</del><ins>+        backendDispatcher()-&gt;reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+        backendDispatcher()-&gt;sendPendingErrors();
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     id successCallback = ^{
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), String());
</del><ins>+        backendDispatcher()-&gt;sendResponse(requestId, InspectorObject::create());
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     [m_delegate loadResource7WithErrorCallback:errorCallback successCallback:successCallback];
</span></span></pre></div>
<a id="branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpectedenumvaluesjsonresult"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/enum-values.json-result (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/enum-values.json-result        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/enum-values.json-result        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -169,9 +169,9 @@
</span><span class="cx"> class CommandDomainBackendDispatcher final : public SupplementalBackendDispatcher {
</span><span class="cx"> public:
</span><span class="cx">     static Ref&lt;CommandDomainBackendDispatcher&gt; create(BackendDispatcher*, CommandDomainBackendDispatcherHandler*);
</span><del>-    virtual void dispatch(long callId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message) override;
</del><ins>+    virtual void dispatch(long requestId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message) override;
</ins><span class="cx"> private:
</span><del>-    void commandWithEnumReturnValue(long callId, const InspectorObject&amp; message);
</del><ins>+    void commandWithEnumReturnValue(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; parameters);
</ins><span class="cx"> private:
</span><span class="cx">     CommandDomainBackendDispatcher(BackendDispatcher&amp;, CommandDomainBackendDispatcherHandler*);
</span><span class="cx">     CommandDomainBackendDispatcherHandler* m_agent;
</span><span class="lines">@@ -224,6 +224,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &lt;inspector/InspectorFrontendChannel.h&gt;
</span><span class="cx"> #include &lt;inspector/InspectorValues.h&gt;
</span><ins>+#include &lt;wtf/NeverDestroyed.h&gt;
</ins><span class="cx"> #include &lt;wtf/text/CString.h&gt;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="lines">@@ -249,21 +250,24 @@
</span><span class="cx">     m_backendDispatcher-&gt;registerDispatcherForDomain(ASCIILiteral(&quot;CommandDomain&quot;), this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void CommandDomainBackendDispatcher::dispatch(long callId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message)
</del><ins>+void CommandDomainBackendDispatcher::dispatch(long requestId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message)
</ins><span class="cx"> {
</span><span class="cx">     Ref&lt;CommandDomainBackendDispatcher&gt; protect(*this);
</span><span class="cx"> 
</span><ins>+    RefPtr&lt;InspectorObject&gt; parameters;
+    message-&gt;getObject(ASCIILiteral(&quot;params&quot;), parameters);
+
</ins><span class="cx">     if (method == &quot;commandWithEnumReturnValue&quot;)
</span><del>-        commandWithEnumReturnValue(callId, message);
</del><ins>+        commandWithEnumReturnValue(requestId, WTF::move(parameters));
</ins><span class="cx">     else
</span><del>-        m_backendDispatcher-&gt;reportProtocolError(&amp;callId, BackendDispatcher::MethodNotFound, makeString('\'', &quot;CommandDomain&quot;, '.', method, &quot;' was not found&quot;));
</del><ins>+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::MethodNotFound, makeString('\'', &quot;CommandDomain&quot;, '.', method, &quot;' was not found&quot;));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void CommandDomainBackendDispatcher::commandWithEnumReturnValue(long callId, const InspectorObject&amp;)
</del><ins>+void CommandDomainBackendDispatcher::commandWithEnumReturnValue(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp;)
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx">     if (m_alternateDispatcher) {
</span><del>-        m_alternateDispatcher-&gt;commandWithEnumReturnValue(callId);
</del><ins>+        m_alternateDispatcher-&gt;commandWithEnumReturnValue(requestId);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="lines">@@ -276,7 +280,10 @@
</span><span class="cx">     if (!error.length())
</span><span class="cx">         result-&gt;setString(ASCIILiteral(&quot;returnValue&quot;), Inspector::Protocol::getEnumConstantValue(out_returnValue));
</span><span class="cx"> 
</span><del>-    m_backendDispatcher-&gt;sendResponse(callId, WTF::move(result), error);
</del><ins>+    if (!error.length())
+        m_backendDispatcher-&gt;sendResponse(requestId, WTF::move(result));
+    else
+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace Inspector
</span><span class="lines">@@ -584,7 +591,7 @@
</span><span class="cx"> class ObjCInspectorCommandDomainBackendDispatcher final : public AlternateCommandDomainBackendDispatcher {
</span><span class="cx"> public:
</span><span class="cx">     ObjCInspectorCommandDomainBackendDispatcher(id&lt;RWIProtocolCommandDomainDomainHandler&gt; handler) { m_delegate = handler; }
</span><del>-    virtual void commandWithEnumReturnValue(long callId) override;
</del><ins>+    virtual void commandWithEnumReturnValue(long requestId) override;
</ins><span class="cx"> private:
</span><span class="cx">     RetainPtr&lt;id&lt;RWIProtocolCommandDomainDomainHandler&gt;&gt; m_delegate;
</span><span class="cx"> };
</span><span class="lines">@@ -777,16 +784,17 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-void ObjCInspectorCommandDomainBackendDispatcher::commandWithEnumReturnValue(long callId)
</del><ins>+void ObjCInspectorCommandDomainBackendDispatcher::commandWithEnumReturnValue(long requestId)
</ins><span class="cx"> {
</span><span class="cx">     id errorCallback = ^(NSString *error) {
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), error);
</del><ins>+        backendDispatcher()-&gt;reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+        backendDispatcher()-&gt;sendPendingErrors();
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     id successCallback = ^(RWIProtocolCommandDomainCommandWithEnumReturnValueReturnValue returnValue) {
</span><span class="cx">         Ref&lt;InspectorObject&gt; resultObject = InspectorObject::create();
</span><span class="cx">         resultObject-&gt;setString(ASCIILiteral(&quot;returnValue&quot;), toProtocolString(returnValue));
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, WTF::move(resultObject), String());
</del><ins>+        backendDispatcher()-&gt;sendResponse(requestId, WTF::move(resultObject));
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     [m_delegate commandWithEnumReturnValueWithErrorCallback:errorCallback successCallback:successCallback];
</span></span></pre></div>
<a id="branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpectedeventswithoptionalparametersjsonresult"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/events-with-optional-parameters.json-result (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/events-with-optional-parameters.json-result        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/events-with-optional-parameters.json-result        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -180,6 +180,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &lt;inspector/InspectorFrontendChannel.h&gt;
</span><span class="cx"> #include &lt;inspector/InspectorValues.h&gt;
</span><ins>+#include &lt;wtf/NeverDestroyed.h&gt;
</ins><span class="cx"> #include &lt;wtf/text/CString.h&gt;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span></span></pre></div>
<a id="branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpectedgeneratedomainswithfeatureguardsjsonresult"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/generate-domains-with-feature-guards.json-result (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/generate-domains-with-feature-guards.json-result        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/generate-domains-with-feature-guards.json-result        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -165,9 +165,9 @@
</span><span class="cx"> class Network1BackendDispatcher final : public SupplementalBackendDispatcher {
</span><span class="cx"> public:
</span><span class="cx">     static Ref&lt;Network1BackendDispatcher&gt; create(BackendDispatcher*, Network1BackendDispatcherHandler*);
</span><del>-    virtual void dispatch(long callId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message) override;
</del><ins>+    virtual void dispatch(long requestId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message) override;
</ins><span class="cx"> private:
</span><del>-    void loadResource(long callId, const InspectorObject&amp; message);
</del><ins>+    void loadResource(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp; parameters);
</ins><span class="cx"> private:
</span><span class="cx">     Network1BackendDispatcher(BackendDispatcher&amp;, Network1BackendDispatcherHandler*);
</span><span class="cx">     Network1BackendDispatcherHandler* m_agent;
</span><span class="lines">@@ -221,6 +221,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &lt;inspector/InspectorFrontendChannel.h&gt;
</span><span class="cx"> #include &lt;inspector/InspectorValues.h&gt;
</span><ins>+#include &lt;wtf/NeverDestroyed.h&gt;
</ins><span class="cx"> #include &lt;wtf/text/CString.h&gt;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="lines">@@ -249,21 +250,24 @@
</span><span class="cx">     m_backendDispatcher-&gt;registerDispatcherForDomain(ASCIILiteral(&quot;Network1&quot;), this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void Network1BackendDispatcher::dispatch(long callId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message)
</del><ins>+void Network1BackendDispatcher::dispatch(long requestId, const String&amp; method, Ref&lt;InspectorObject&gt;&amp;&amp; message)
</ins><span class="cx"> {
</span><span class="cx">     Ref&lt;Network1BackendDispatcher&gt; protect(*this);
</span><span class="cx"> 
</span><ins>+    RefPtr&lt;InspectorObject&gt; parameters;
+    message-&gt;getObject(ASCIILiteral(&quot;params&quot;), parameters);
+
</ins><span class="cx">     if (method == &quot;loadResource&quot;)
</span><del>-        loadResource(callId, message);
</del><ins>+        loadResource(requestId, WTF::move(parameters));
</ins><span class="cx">     else
</span><del>-        m_backendDispatcher-&gt;reportProtocolError(&amp;callId, BackendDispatcher::MethodNotFound, makeString('\'', &quot;Network1&quot;, '.', method, &quot;' was not found&quot;));
</del><ins>+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::MethodNotFound, makeString('\'', &quot;Network1&quot;, '.', method, &quot;' was not found&quot;));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void Network1BackendDispatcher::loadResource(long callId, const InspectorObject&amp;)
</del><ins>+void Network1BackendDispatcher::loadResource(long requestId, RefPtr&lt;InspectorObject&gt;&amp;&amp;)
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx">     if (m_alternateDispatcher) {
</span><del>-        m_alternateDispatcher-&gt;loadResource(callId);
</del><ins>+        m_alternateDispatcher-&gt;loadResource(requestId);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="lines">@@ -272,7 +276,10 @@
</span><span class="cx">     Ref&lt;InspectorObject&gt; result = InspectorObject::create();
</span><span class="cx">     m_agent-&gt;loadResource(error);
</span><span class="cx"> 
</span><del>-    m_backendDispatcher-&gt;sendResponse(callId, WTF::move(result), error);
</del><ins>+    if (!error.length())
+        m_backendDispatcher-&gt;sendResponse(requestId, WTF::move(result));
+    else
+        m_backendDispatcher-&gt;reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));
</ins><span class="cx"> }
</span><span class="cx"> #endif // PLATFORM(WEB_COMMANDS)
</span><span class="cx"> 
</span><span class="lines">@@ -627,7 +634,7 @@
</span><span class="cx"> class ObjCInspectorNetwork1BackendDispatcher final : public AlternateNetwork1BackendDispatcher {
</span><span class="cx"> public:
</span><span class="cx">     ObjCInspectorNetwork1BackendDispatcher(id&lt;RWIProtocolNetwork1DomainHandler&gt; handler) { m_delegate = handler; }
</span><del>-    virtual void loadResource(long callId) override;
</del><ins>+    virtual void loadResource(long requestId) override;
</ins><span class="cx"> private:
</span><span class="cx">     RetainPtr&lt;id&lt;RWIProtocolNetwork1DomainHandler&gt;&gt; m_delegate;
</span><span class="cx"> };
</span><span class="lines">@@ -822,14 +829,15 @@
</span><span class="cx"> namespace Inspector {
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(WEB_COMMANDS)
</span><del>-void ObjCInspectorNetwork1BackendDispatcher::loadResource(long callId)
</del><ins>+void ObjCInspectorNetwork1BackendDispatcher::loadResource(long requestId)
</ins><span class="cx"> {
</span><span class="cx">     id errorCallback = ^(NSString *error) {
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), error);
</del><ins>+        backendDispatcher()-&gt;reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+        backendDispatcher()-&gt;sendPendingErrors();
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     id successCallback = ^{
</span><del>-        backendDispatcher()-&gt;sendResponse(callId, InspectorObject::create(), String());
</del><ins>+        backendDispatcher()-&gt;sendResponse(requestId, InspectorObject::create());
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     [m_delegate loadResourceWithErrorCallback:errorCallback successCallback:successCallback];
</span></span></pre></div>
<a id="branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpectedsametypeiddifferentdomainjsonresult"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/same-type-id-different-domain.json-result (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/same-type-id-different-domain.json-result        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/same-type-id-different-domain.json-result        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -174,6 +174,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &lt;inspector/InspectorFrontendChannel.h&gt;
</span><span class="cx"> #include &lt;inspector/InspectorValues.h&gt;
</span><ins>+#include &lt;wtf/NeverDestroyed.h&gt;
</ins><span class="cx"> #include &lt;wtf/text/CString.h&gt;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span></span></pre></div>
<a id="branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpectedshadowedoptionaltypesettersjsonresult"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/shadowed-optional-type-setters.json-result (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/shadowed-optional-type-setters.json-result        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/shadowed-optional-type-setters.json-result        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -174,6 +174,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &lt;inspector/InspectorFrontendChannel.h&gt;
</span><span class="cx"> #include &lt;inspector/InspectorValues.h&gt;
</span><ins>+#include &lt;wtf/NeverDestroyed.h&gt;
</ins><span class="cx"> #include &lt;wtf/text/CString.h&gt;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span></span></pre></div>
<a id="branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpectedtypedeclarationaliasedprimitivetypejsonresult"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/type-declaration-aliased-primitive-type.json-result (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/type-declaration-aliased-primitive-type.json-result        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/type-declaration-aliased-primitive-type.json-result        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -174,6 +174,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &lt;inspector/InspectorFrontendChannel.h&gt;
</span><span class="cx"> #include &lt;inspector/InspectorValues.h&gt;
</span><ins>+#include &lt;wtf/NeverDestroyed.h&gt;
</ins><span class="cx"> #include &lt;wtf/text/CString.h&gt;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span></span></pre></div>
<a id="branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpectedtypedeclarationarraytypejsonresult"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/type-declaration-array-type.json-result (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/type-declaration-array-type.json-result        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/type-declaration-array-type.json-result        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -177,6 +177,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &lt;inspector/InspectorFrontendChannel.h&gt;
</span><span class="cx"> #include &lt;inspector/InspectorValues.h&gt;
</span><ins>+#include &lt;wtf/NeverDestroyed.h&gt;
</ins><span class="cx"> #include &lt;wtf/text/CString.h&gt;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span></span></pre></div>
<a id="branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpectedtypedeclarationenumtypejsonresult"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/type-declaration-enum-type.json-result (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/type-declaration-enum-type.json-result        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/type-declaration-enum-type.json-result        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -178,6 +178,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &lt;inspector/InspectorFrontendChannel.h&gt;
</span><span class="cx"> #include &lt;inspector/InspectorValues.h&gt;
</span><ins>+#include &lt;wtf/NeverDestroyed.h&gt;
</ins><span class="cx"> #include &lt;wtf/text/CString.h&gt;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span></span></pre></div>
<a id="branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpectedtypedeclarationobjecttypejsonresult"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/type-declaration-object-type.json-result (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/type-declaration-object-type.json-result        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/type-declaration-object-type.json-result        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -174,6 +174,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &lt;inspector/InspectorFrontendChannel.h&gt;
</span><span class="cx"> #include &lt;inspector/InspectorValues.h&gt;
</span><ins>+#include &lt;wtf/NeverDestroyed.h&gt;
</ins><span class="cx"> #include &lt;wtf/text/CString.h&gt;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span></span></pre></div>
<a id="branchessafari601branchSourceJavaScriptCoreinspectorscriptstestsexpectedtyperequiringruntimecastsjsonresult"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/type-requiring-runtime-casts.json-result (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/type-requiring-runtime-casts.json-result        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/Source/JavaScriptCore/inspector/scripts/tests/expected/type-requiring-runtime-casts.json-result        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -178,6 +178,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &lt;inspector/InspectorFrontendChannel.h&gt;
</span><span class="cx"> #include &lt;inspector/InspectorValues.h&gt;
</span><ins>+#include &lt;wtf/NeverDestroyed.h&gt;
</ins><span class="cx"> #include &lt;wtf/text/CString.h&gt;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span></span></pre></div>
<a id="branchessafari601branchSourceWebInspectorUIChangeLog"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebInspectorUI/ChangeLog (193177 => 193178)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebInspectorUI/ChangeLog        2015-12-03 18:54:09 UTC (rev 193177)
+++ branches/safari-601-branch/Source/WebInspectorUI/ChangeLog        2015-12-03 18:54:23 UTC (rev 193178)
</span><span class="lines">@@ -1,5 +1,18 @@
</span><span class="cx"> 2015-12-02  Timothy Hatcher  &lt;timothy@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        Merge r188965. rdar://problem/23221163
+
+    2015-08-25  Brian Burg  &lt;bburg@apple.com&gt;
+
+            Web Inspector: no need to allocate protocolErrors array for every dispatched backend command
+            https://bugs.webkit.org/show_bug.cgi?id=146466
+
+            Reviewed by Joseph Pecoraro.
+
+            * UserInterface/TestStub.html: Fix a typo, this property exists on ProtocolTest.
+
+2015-12-02  Timothy Hatcher  &lt;timothy@apple.com&gt;
+
</ins><span class="cx">         Merge r188964. rdar://problem/23221163
</span><span class="cx"> 
</span><span class="cx">     2015-08-26  Matt Baker  &lt;mattbaker@apple.com&gt;
</span></span></pre>
</div>
</div>

</body>
</html>