<!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 <timothy@apple.com>
</span><span class="cx">
</span><ins>+ Merge r188965. rdar://problem/23221163
+
+ 2015-08-25 Brian Burg <bburg@apple.com>
+
+ 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 <timothy@apple.com>
+
</ins><span class="cx"> Merge r188897. rdar://problem/23221163
</span><span class="cx">
</span><span class="cx"> 2015-08-24 Brian Burg <bburg@apple.com>
</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 "InvalidParams" (-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: [{"code":-32602,"message":"'params' object must contain required parameter 'expression' with type 'String'."},{"code":-32602,"message":"Some arguments of method 'Runtime.evaluate' can't be processed"}]
</ins><span class="cx">
</span><span class="cx"> -- Running test case: MissingRequiredParameter
</span><span class="cx"> Sending message: {"id":123,"method":"Runtime.evaluate","params":{"stuff":123}}
</span><span class="lines">@@ -16,7 +16,7 @@
</span><span class="cx"> PASS: the reported error should be "InvalidParams" (-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: [{"code":-32602,"message":"Parameter 'expression' with type 'String' was not found."},{"code":-32602,"message":"Some arguments of method 'Runtime.evaluate' can't be processed"}]
</ins><span class="cx">
</span><span class="cx"> -- Running test case: RequiredParameterWrongType
</span><span class="cx"> Sending message: {"id":123,"method":"Runtime.evaluate","params":{"expression":[]}}
</span><span class="lines">@@ -24,7 +24,7 @@
</span><span class="cx"> PASS: the reported error should be "InvalidParams" (-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: [{"code":-32602,"message":"Parameter 'expression' has wrong type. It must be 'String'."},{"code":-32602,"message":"Some arguments of method 'Runtime.evaluate' can't be processed"}]
</ins><span class="cx">
</span><span class="cx"> -- Running test case: OptionalParameterWrongType
</span><span class="cx"> Sending message: {"id":123,"method":"Runtime.evaluate","params":{"expression":"42","includeCommandLineAPI":123}}
</span><span class="lines">@@ -32,7 +32,7 @@
</span><span class="cx"> PASS: the reported error should be "InvalidParams" (-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: [{"code":-32602,"message":"Parameter 'includeCommandLineAPI' has wrong type. It must be 'Boolean'."},{"code":-32602,"message":"Some arguments of method 'Runtime.evaluate' can't be processed"}]
</ins><span class="cx">
</span><span class="cx"> -- Running test case: TestErrorCodeForSyncServerError
</span><span class="cx"> Sending message: {"id":123,"method":"Database.getDatabaseTableNames","params":{"databaseId":"thisisNotADatabase"}}
</span><span class="lines">@@ -40,6 +40,7 @@
</span><span class="cx"> PASS: the reported error should be "ServerError" (-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: [{"code":-32000,"message":"Database agent is not enabled"}]
</ins><span class="cx">
</span><span class="cx"> -- Running test case: TestErrorCodeForAsyncServerError
</span><span class="cx"> Sending message: {"id":123,"method":"Database.executeSQL","params":{"databaseId":"thisisNotADatabase","query":"asdf"}}
</span><span class="lines">@@ -47,6 +48,7 @@
</span><span class="cx"> PASS: the reported error should be "ServerError" (-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: [{"code":-32000,"message":"Database agent is not enabled"}]
</ins><span class="cx">
</span><span class="cx"> -- Running test case: CommandWithBadArgumentValue
</span><span class="cx"> Sending message: {"id":123,"method":"Runtime.getProperties","params":{"objectId":"thisisNotAnId"}}
</span><span class="lines">@@ -54,4 +56,5 @@
</span><span class="cx"> PASS: the reported error should be "ServerError" (-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: [{"code":-32000,"message":"Inspected frame has gone"}]
</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("Actual error code: " + response.code);
</span><span class="cx"> ProtocolTest.log("Actual error message: " + response.message);
</span><span class="cx"> if (response.data)
</span><del>- ProtocolTest.log("Actual error data: " + response.data);
</del><ins>+ ProtocolTest.log("Actual error data: " + 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 <timothy@apple.com>
</span><span class="cx">
</span><ins>+ Merge r188965. rdar://problem/23221163
+
+ 2015-08-25 Brian Burg <bburg@apple.com>
+
+ 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<InspectorObject>
+ 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 <timothy@apple.com>
+
</ins><span class="cx"> Merge r188897. rdar://problem/23221163
</span><span class="cx">
</span><span class="cx"> 2015-08-24 Brian Burg <bburg@apple.com>
</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 "InspectorFrontendChannel.h"
</span><span class="cx"> #include "InspectorValues.h"
</span><ins>+#include <wtf/TemporaryChange.h>
</ins><span class="cx"> #include <wtf/text/CString.h>
</span><span class="cx"> #include <wtf/text/WTFString.h>
</span><span class="cx">
</span><span class="cx"> namespace Inspector {
</span><span class="cx">
</span><del>-BackendDispatcher::CallbackBase::CallbackBase(Ref<BackendDispatcher>&& backendDispatcher, int id)
</del><ins>+BackendDispatcher::CallbackBase::CallbackBase(Ref<BackendDispatcher>&& 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& 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->reportProtocolError(m_requestId, ServerError, error);
+ m_backendDispatcher->sendPendingErrors();
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void BackendDispatcher::CallbackBase::sendIfActive(RefPtr<InspectorObject>&& partialMessage, const ErrorString& invocationError)
</del><ins>+void BackendDispatcher::CallbackBase::sendSuccess(RefPtr<InspectorObject>&& 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->sendResponse(m_id, WTF::move(partialMessage), invocationError);
</del><span class="cx"> m_alreadySent = true;
</span><ins>+ m_backendDispatcher->sendResponse(m_requestId, WTF::move(partialMessage));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> Ref<BackendDispatcher> BackendDispatcher::create(FrontendChannel* frontendChannel)
</span><span class="lines">@@ -76,83 +84,94 @@
</span><span class="cx"> {
</span><span class="cx"> Ref<BackendDispatcher> protect(*this);
</span><span class="cx">
</span><ins>+ ASSERT(!m_protocolErrors.size());
+
</ins><span class="cx"> RefPtr<InspectorValue> parsedMessage;
</span><span class="cx"> if (!InspectorValue::parseJSON(message, parsedMessage)) {
</span><del>- reportProtocolError(nullptr, ParseError, ASCIILiteral("Message must be in JSON format"));
</del><ins>+ reportProtocolError(ParseError, ASCIILiteral("Message must be in JSON format"));
+ sendPendingErrors();
</ins><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> RefPtr<InspectorObject> messageObject;
</span><span class="cx"> if (!parsedMessage->asObject(messageObject)) {
</span><del>- reportProtocolError(nullptr, InvalidRequest, ASCIILiteral("Message must be a JSONified object"));
</del><ins>+ reportProtocolError(InvalidRequest, ASCIILiteral("Message must be a JSONified object"));
+ sendPendingErrors();
</ins><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- RefPtr<InspectorValue> callIdValue;
- if (!messageObject->getValue(ASCIILiteral("id"), callIdValue)) {
- reportProtocolError(nullptr, InvalidRequest, ASCIILiteral("'id' property was not found"));
</del><ins>+ RefPtr<InspectorValue> requestIdValue;
+ if (!messageObject->getValue(ASCIILiteral("id"), requestIdValue)) {
+ reportProtocolError(InvalidRequest, ASCIILiteral("'id' property was not found"));
+ sendPendingErrors();
</ins><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- long callId = 0;
- if (!callIdValue->asInteger(callId)) {
- reportProtocolError(nullptr, InvalidRequest, ASCIILiteral("The type of 'id' property must be integer"));
</del><ins>+ long requestId = 0;
+ if (!requestIdValue->asInteger(requestId)) {
+ reportProtocolError(InvalidRequest, ASCIILiteral("The type of 'id' property must be integer"));
+ sendPendingErrors();
</ins><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ ASSERT(!m_currentRequestId);
+ TemporaryChange<Optional<long>> scopedRequestId(m_currentRequestId, requestId);
+
</ins><span class="cx"> RefPtr<InspectorValue> methodValue;
</span><span class="cx"> if (!messageObject->getValue(ASCIILiteral("method"), methodValue)) {
</span><del>- reportProtocolError(&callId, InvalidRequest, ASCIILiteral("'method' property wasn't found"));
</del><ins>+ reportProtocolError(InvalidRequest, ASCIILiteral("'method' property wasn't found"));
+ 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->asString(methodString)) {
</span><del>- reportProtocolError(&callId, InvalidRequest, ASCIILiteral("The type of 'method' property must be string"));
</del><ins>+ reportProtocolError(InvalidRequest, ASCIILiteral("The type of 'method' property must be string"));
+ sendPendingErrors();
</ins><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> Vector<String> 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(&callId, InvalidRequest, ASCIILiteral("The 'method' property was formatted incorrectly. It should be 'Domain.method'"));
</del><ins>+ reportProtocolError(InvalidRequest, ASCIILiteral("The 'method' property was formatted incorrectly. It should be 'Domain.method'"));
+ 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(&callId, MethodNotFound, "'" + domain + "' domain was not found");
</del><ins>+ reportProtocolError(MethodNotFound, "'" + domain + "' domain was not found");
+ 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->dispatch(callId, method, messageObject.releaseNonNull());
</del><ins>+ domainDispatcher->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<InspectorObject>&& result, const ErrorString& invocationError)
</del><ins>+void BackendDispatcher::sendResponse(long requestId, RefPtr<InspectorObject>&& 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(&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 "error" 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<InspectorObject> responseMessage = InspectorObject::create();
</span><span class="cx"> responseMessage->setObject(ASCIILiteral("result"), result);
</span><del>- responseMessage->setInteger(ASCIILiteral("id"), callId);
</del><ins>+ responseMessage->setInteger(ASCIILiteral("id"), requestId);
</ins><span class="cx"> m_frontendChannel->sendMessageToFrontend(responseMessage->toJSONString());
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void BackendDispatcher::reportProtocolError(const long* const callId, CommonErrorCode errorCode, const String& 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& errorMessage, RefPtr<Inspector::Protocol::Array<String>>&& 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 >= 0);
- ASSERT_ARG(errorCode, (unsigned)errorCode < 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<InspectorArray> payload = InspectorArray::create();
+
+ for (auto& data : m_protocolErrors) {
+ errorCode = std::get<0>(data);
+ errorMessage = std::get<1>(data);
</ins><span class="cx">
</span><del>- Ref<InspectorObject> error = InspectorObject::create();
- error->setInteger(ASCIILiteral("code"), errorCodes[errorCode]);
- error->setString(ASCIILiteral("message"), errorMessage);
- if (data)
- error->setArray(ASCIILiteral("data"), WTF::move(data));
</del><ins>+ ASSERT_ARG(errorCode, (unsigned)errorCode < WTF_ARRAY_LENGTH(errorCodes));
+ ASSERT_ARG(errorCode, errorCodes[errorCode]);
</ins><span class="cx">
</span><ins>+ Ref<InspectorObject> error = InspectorObject::create();
+ error->setInteger(ASCIILiteral("code"), errorCodes[errorCode]);
+ error->setString(ASCIILiteral("message"), errorMessage);
+ payload->pushObject(WTF::move(error));
+ }
+
+ Ref<InspectorObject> topLevelError = InspectorObject::create();
+ topLevelError->setInteger(ASCIILiteral("code"), errorCodes[errorCode]);
+ topLevelError->setString(ASCIILiteral("message"), errorMessage);
+ topLevelError->setArray(ASCIILiteral("data"), WTF::move(payload));
+
</ins><span class="cx"> Ref<InspectorObject> message = InspectorObject::create();
</span><del>- message->setObject(ASCIILiteral("error"), WTF::move(error));
- if (callId)
- message->setInteger(ASCIILiteral("id"), *callId);
- else
</del><ins>+ message->setObject(ASCIILiteral("error"), WTF::move(topLevelError));
+ if (m_currentRequestId)
+ message->setInteger(ASCIILiteral("id"), 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->setValue(ASCIILiteral("id"), InspectorValue::null());
</span><ins>+ }
</ins><span class="cx">
</span><span class="cx"> m_frontendChannel->sendMessageToFrontend(message->toJSONString());
</span><ins>+
+ m_protocolErrors.clear();
+ m_currentRequestId = Nullopt;
</ins><span class="cx"> }
</span><ins>+
+void BackendDispatcher::reportProtocolError(CommonErrorCode errorCode, const String& errorMessage)
+{
+ reportProtocolError(m_currentRequestId, errorCode, errorMessage);
+}
</ins><span class="cx">
</span><del>-template<typename ReturnValueType, typename ValueType, typename DefaultValueType>
-static ReturnValueType getPropertyValue(InspectorObject* object, const String& name, bool* out_optionalValueFound, Inspector::Protocol::Array<String>& protocolErrors, DefaultValueType defaultValue, bool (*asMethod)(InspectorValue&, ValueType&), const char* typeName)
</del><ins>+void BackendDispatcher::reportProtocolError(Optional<long> relatedRequestId, CommonErrorCode errorCode, const String& errorMessage)
</ins><span class="cx"> {
</span><del>- ValueType result = defaultValue;
</del><ins>+ ASSERT_ARG(errorCode, errorCode >= 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<CommonErrorCode, String>(errorCode, errorMessage));
+}
+
+template<typename T>
+T BackendDispatcher::getPropertyValue(InspectorObject* object, const String& name, bool* out_optionalValueFound, T defaultValue, std::function<bool(InspectorValue&, T&)> 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("'params' object must contain required parameter '%s' with type '%s'.", name.utf8().data(), typeName));
</del><ins>+ reportProtocolError(BackendDispatcher::InvalidParams, String::format("'params' object must contain required parameter '%s' with type '%s'.", 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->find(name);
</span><span class="cx"> if (findResult == object->end()) {
</span><span class="cx"> if (!out_optionalValueFound)
</span><del>- protocolErrors.addItem(String::format("Parameter '%s' with type '%s' was not found.", name.utf8().data(), typeName));
</del><ins>+ reportProtocolError(BackendDispatcher::InvalidParams, String::format("Parameter '%s' with type '%s' was not found.", 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->value, result)) {
</span><del>- protocolErrors.addItem(String::format("Parameter '%s' has wrong type. It must be '%s'.", name.utf8().data(), typeName));
</del><ins>+ reportProtocolError(BackendDispatcher::InvalidParams, String::format("Parameter '%s' has wrong type. It must be '%s'.", 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& value, int& output) { return value.asInteger(output); }
- static bool asDouble(InspectorValue& value, double& output) { return value.asDouble(output); }
- static bool asString(InspectorValue& value, String& output) { return value.asString(output); }
- static bool asBoolean(InspectorValue& value, bool& output) { return value.asBoolean(output); }
- static bool asObject(InspectorValue& value, RefPtr<InspectorObject>& output) { return value.asObject(output); }
- static bool asArray(InspectorValue& value, RefPtr<InspectorArray>& output) { return value.asArray(output); }
- static bool asValue(InspectorValue& value, RefPtr<InspectorValue>& output) { return value.asValue(output); }
-};
</del><ins>+static bool castToInteger(InspectorValue& value, int& result) { return value.asInteger(result); }
+static bool castToNumber(InspectorValue& value, double& result) { return value.asDouble(result); }
</ins><span class="cx">
</span><del>-int BackendDispatcher::getInteger(InspectorObject* object, const String& name, bool* valueFound, Inspector::Protocol::Array<String>& protocolErrors)
</del><ins>+int BackendDispatcher::getInteger(InspectorObject* object, const String& name, bool* valueFound)
</ins><span class="cx"> {
</span><del>- return getPropertyValue<int, int, int>(object, name, valueFound, protocolErrors, 0, AsMethodBridges::asInteger, "Integer");
</del><ins>+ return getPropertyValue<int>(object, name, valueFound, 0, &castToInteger, "Integer");
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-double BackendDispatcher::getDouble(InspectorObject* object, const String& name, bool* valueFound, Inspector::Protocol::Array<String>& protocolErrors)
</del><ins>+double BackendDispatcher::getDouble(InspectorObject* object, const String& name, bool* valueFound)
</ins><span class="cx"> {
</span><del>- return getPropertyValue<double, double, double>(object, name, valueFound, protocolErrors, 0, AsMethodBridges::asDouble, "Number");
</del><ins>+ return getPropertyValue<double>(object, name, valueFound, 0, &castToNumber, "Number");
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-String BackendDispatcher::getString(InspectorObject* object, const String& name, bool* valueFound, Inspector::Protocol::Array<String>& protocolErrors)
</del><ins>+String BackendDispatcher::getString(InspectorObject* object, const String& name, bool* valueFound)
</ins><span class="cx"> {
</span><del>- return getPropertyValue<String, String, String>(object, name, valueFound, protocolErrors, "", AsMethodBridges::asString, "String");
</del><ins>+ return getPropertyValue<String>(object, name, valueFound, "", &InspectorValue::asString, "String");
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-bool BackendDispatcher::getBoolean(InspectorObject* object, const String& name, bool* valueFound, Inspector::Protocol::Array<String>& protocolErrors)
</del><ins>+bool BackendDispatcher::getBoolean(InspectorObject* object, const String& name, bool* valueFound)
</ins><span class="cx"> {
</span><del>- return getPropertyValue<bool, bool, bool>(object, name, valueFound, protocolErrors, false, AsMethodBridges::asBoolean, "Boolean");
</del><ins>+ return getPropertyValue<bool>(object, name, valueFound, false, &InspectorValue::asBoolean, "Boolean");
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-RefPtr<InspectorObject> BackendDispatcher::getObject(InspectorObject* object, const String& name, bool* valueFound, Inspector::Protocol::Array<String>& protocolErrors)
</del><ins>+RefPtr<InspectorObject> BackendDispatcher::getObject(InspectorObject* object, const String& name, bool* valueFound)
</ins><span class="cx"> {
</span><del>- return getPropertyValue<RefPtr<InspectorObject>, RefPtr<InspectorObject>, InspectorObject*>(object, name, valueFound, protocolErrors, nullptr, AsMethodBridges::asObject, "Object");
</del><ins>+ return getPropertyValue<RefPtr<InspectorObject>>(object, name, valueFound, nullptr, &InspectorValue::asObject, "Object");
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-RefPtr<InspectorArray> BackendDispatcher::getArray(InspectorObject* object, const String& name, bool* valueFound, Inspector::Protocol::Array<String>& protocolErrors)
</del><ins>+RefPtr<InspectorArray> BackendDispatcher::getArray(InspectorObject* object, const String& name, bool* valueFound)
</ins><span class="cx"> {
</span><del>- return getPropertyValue<RefPtr<InspectorArray>, RefPtr<InspectorArray>, InspectorArray*>(object, name, valueFound, protocolErrors, nullptr, AsMethodBridges::asArray, "Array");
</del><ins>+ return getPropertyValue<RefPtr<InspectorArray>>(object, name, valueFound, nullptr, &InspectorValue::asArray, "Array");
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-RefPtr<InspectorValue> BackendDispatcher::getValue(InspectorObject* object, const String& name, bool* valueFound, Inspector::Protocol::Array<String>& protocolErrors)
</del><ins>+RefPtr<InspectorValue> BackendDispatcher::getValue(InspectorObject* object, const String& name, bool* valueFound)
</ins><span class="cx"> {
</span><del>- return getPropertyValue<RefPtr<InspectorValue>, RefPtr<InspectorValue>, InspectorValue*>(object, name, valueFound, protocolErrors, nullptr, AsMethodBridges::asValue, "Value");
</del><ins>+ return getPropertyValue<RefPtr<InspectorValue>>(object, name, valueFound, nullptr, &InspectorValue::asValue, "Value");
</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 "InspectorProtocolTypes.h"
</span><ins>+#include <wtf/Optional.h>
</ins><span class="cx"> #include <wtf/RefCounted.h>
</span><span class="cx"> #include <wtf/text/WTFString.h>
</span><span class="cx">
</span><span class="lines">@@ -43,35 +44,36 @@
</span><span class="cx"> SupplementalBackendDispatcher(BackendDispatcher& backendDispatcher)
</span><span class="cx"> : m_backendDispatcher(backendDispatcher) { }
</span><span class="cx"> virtual ~SupplementalBackendDispatcher() { }
</span><del>- virtual void dispatch(long callId, const String& method, Ref<InspectorObject>&& message) = 0;
</del><ins>+ virtual void dispatch(long requestId, const String& method, Ref<InspectorObject>&& message) = 0;
</ins><span class="cx"> protected:
</span><span class="cx"> Ref<BackendDispatcher> m_backendDispatcher;
</span><span class="cx"> };
</span><span class="cx">
</span><del>-class JS_EXPORT_PRIVATE BackendDispatcher : public RefCounted<BackendDispatcher> {
</del><ins>+class BackendDispatcher : public RefCounted<BackendDispatcher> {
</ins><span class="cx"> public:
</span><del>- static Ref<BackendDispatcher> create(FrontendChannel*);
</del><ins>+ JS_EXPORT_PRIVATE static Ref<BackendDispatcher> create(FrontendChannel*);
</ins><span class="cx">
</span><span class="cx"> class JS_EXPORT_PRIVATE CallbackBase : public RefCounted<CallbackBase> {
</span><span class="cx"> public:
</span><del>- CallbackBase(Ref<BackendDispatcher>&&, int id);
</del><ins>+ CallbackBase(Ref<BackendDispatcher>&&, long requestId);
</ins><span class="cx">
</span><span class="cx"> bool isActive() const;
</span><del>- void sendFailure(const ErrorString&);
</del><span class="cx"> void disable() { m_alreadySent = true; }
</span><span class="cx">
</span><del>- protected:
- void sendIfActive(RefPtr<InspectorObject>&& partialMessage, const ErrorString& invocationError);
</del><ins>+ void sendSuccess(RefPtr<InspectorObject>&&);
+ void sendFailure(const ErrorString&);
</ins><span class="cx">
</span><span class="cx"> private:
</span><span class="cx"> Ref<BackendDispatcher> 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() > 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& domain, SupplementalBackendDispatcher*);
</span><del>- void dispatch(const String& message);
- void sendResponse(long callId, RefPtr<InspectorObject>&& result, const ErrorString& invocationError);
- void reportProtocolError(const long* const callId, CommonErrorCode, const String& errorMessage) const;
- void reportProtocolError(const long* const callId, CommonErrorCode, const String& errorMessage, RefPtr<Inspector::Protocol::Array<String>>&& data) const;
</del><ins>+ JS_EXPORT_PRIVATE void dispatch(const String& message);
</ins><span class="cx">
</span><del>- static int getInteger(InspectorObject*, const String& name, bool* valueFound, Inspector::Protocol::Array<String>& protocolErrors);
- static double getDouble(InspectorObject*, const String& name, bool* valueFound, Inspector::Protocol::Array<String>& protocolErrors);
- static String getString(InspectorObject*, const String& name, bool* valueFound, Inspector::Protocol::Array<String>& protocolErrors);
- static bool getBoolean(InspectorObject*, const String& name, bool* valueFound, Inspector::Protocol::Array<String>& protocolErrors);
- static RefPtr<InspectorValue> getValue(InspectorObject*, const String& name, bool* valueFound, Inspector::Protocol::Array<String>& protocolErrors);
- static RefPtr<InspectorObject> getObject(InspectorObject*, const String& name, bool* valueFound, Inspector::Protocol::Array<String>& protocolErrors);
- static RefPtr<InspectorArray> getArray(InspectorObject*, const String& name, bool* valueFound, Inspector::Protocol::Array<String>& protocolErrors);
</del><ins>+ JS_EXPORT_PRIVATE void sendResponse(long requestId, RefPtr<InspectorObject>&& result);
+ JS_EXPORT_PRIVATE void sendPendingErrors();
</ins><span class="cx">
</span><ins>+ void reportProtocolError(CommonErrorCode, const String& errorMessage);
+ JS_EXPORT_PRIVATE void reportProtocolError(Optional<long> relatedRequestId, CommonErrorCode, const String& errorMessage);
+
+ template<typename T>
+ T getPropertyValue(InspectorObject*, const String& name, bool* out_optionalValueFound, T defaultValue, std::function<bool(InspectorValue&, T&)>, const char* typeName);
+
+ int getInteger(InspectorObject*, const String& name, bool* valueFound);
+ double getDouble(InspectorObject*, const String& name, bool* valueFound);
+ String getString(InspectorObject*, const String& name, bool* valueFound);
+ bool getBoolean(InspectorObject*, const String& name, bool* valueFound);
+ RefPtr<InspectorValue> getValue(InspectorObject*, const String& name, bool* valueFound);
+ RefPtr<InspectorObject> getObject(InspectorObject*, const String& name, bool* valueFound);
+ RefPtr<InspectorArray> getArray(InspectorObject*, const String& 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<String, SupplementalBackendDispatcher*> 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<std::tuple<CommonErrorCode, String>> m_protocolErrors;
+
+ // For synchronously handled requests, avoid plumbing requestId through every
+ // call that could potentially fail with a protocol error.
+ Optional<long> 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"> """${classAndExportMacro} ${domainName}BackendDispatcher final : public SupplementalBackendDispatcher {
</span><span class="cx"> public:
</span><span class="cx"> static Ref<${domainName}BackendDispatcher> create(BackendDispatcher*, ${domainName}BackendDispatcherHandler*);
</span><del>- virtual void dispatch(long callId, const String& method, Ref<InspectorObject>&& message) override;
</del><ins>+ virtual void dispatch(long requestId, const String& method, Ref<InspectorObject>&& message) override;
</ins><span class="cx"> ${commandDeclarations}
</span><span class="cx"> private:
</span><span class="cx"> ${domainName}BackendDispatcher(BackendDispatcher&, ${domainName}BackendDispatcherHandler*);
</span><span class="lines">@@ -123,24 +123,30 @@
</span><span class="cx"> virtual void ${commandName}(${inParameters}) = 0;""")
</span><span class="cx">
</span><span class="cx"> BackendDispatcherImplementationSmallSwitch = (
</span><del>- """void ${domainName}BackendDispatcher::dispatch(long callId, const String& method, Ref<InspectorObject>&& message)
</del><ins>+ """void ${domainName}BackendDispatcher::dispatch(long requestId, const String& method, Ref<InspectorObject>&& message)
</ins><span class="cx"> {
</span><span class="cx"> Ref<${domainName}BackendDispatcher> protect(*this);
</span><span class="cx">
</span><ins>+ RefPtr<InspectorObject> parameters;
+ message->getObject(ASCIILiteral("params"), parameters);
+
</ins><span class="cx"> ${dispatchCases}
</span><span class="cx"> else
</span><del>- m_backendDispatcher->reportProtocolError(&callId, BackendDispatcher::MethodNotFound, makeString('\\'', "${domainName}", '.', method, "' was not found"));
</del><ins>+ m_backendDispatcher->reportProtocolError(BackendDispatcher::MethodNotFound, makeString('\\'', "${domainName}", '.', method, "' was not found"));
</ins><span class="cx"> }""")
</span><span class="cx">
</span><span class="cx"> BackendDispatcherImplementationLargeSwitch = (
</span><del>-"""void ${domainName}BackendDispatcher::dispatch(long callId, const String& method, Ref<InspectorObject>&& message)
</del><ins>+"""void ${domainName}BackendDispatcher::dispatch(long requestId, const String& method, Ref<InspectorObject>&& message)
</ins><span class="cx"> {
</span><span class="cx"> Ref<${domainName}BackendDispatcher> protect(*this);
</span><span class="cx">
</span><del>- typedef void (${domainName}BackendDispatcher::*CallHandler)(long callId, const InspectorObject& message);
</del><ins>+ RefPtr<InspectorObject> parameters;
+ message->getObject(ASCIILiteral("params"), parameters);
+
+ typedef void (${domainName}BackendDispatcher::*CallHandler)(long requestId, RefPtr<InspectorObject>&& message);
</ins><span class="cx"> typedef HashMap<String, CallHandler> DispatchMap;
</span><del>- DEPRECATED_DEFINE_STATIC_LOCAL(DispatchMap, dispatchMap, ());
- if (dispatchMap.isEmpty()) {
</del><ins>+ static NeverDestroyed<DispatchMap> 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 < 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<String, CallHandler>::iterator it = dispatchMap.find(method);
- if (it == dispatchMap.end()) {
- m_backendDispatcher->reportProtocolError(&callId, BackendDispatcher::MethodNotFound, makeString('\\'', "${domainName}", '.', method, "' was not found"));
</del><ins>+ auto findResult = dispatchMap.get().find(method);
+ if (findResult == dispatchMap.get().end()) {
+ m_backendDispatcher->reportProtocolError(BackendDispatcher::MethodNotFound, makeString('\\'', "${domainName}", '.', method, "' was not found"));
</ins><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- ((*this).*it->value)(callId, message.get());
</del><ins>+ ((*this).*findResult->value)(requestId, WTF::move(parameters));
</ins><span class="cx"> }""")
</span><span class="cx">
</span><span class="cx"> BackendDispatcherImplementationDomainConstructor = (
</span><span class="lines">@@ -178,13 +184,9 @@
</span><span class="cx"> }""")
</span><span class="cx">
</span><span class="cx"> BackendDispatcherImplementationPrepareCommandArguments = (
</span><del>-""" auto protocolErrors = Inspector::Protocol::Array<String>::create();
- RefPtr<InspectorObject> paramsContainer;
- message.getObject(ASCIILiteral("params"), paramsContainer);
-${inParameterDeclarations}
- if (protocolErrors->length()) {
- String errorMessage = String::format("Some arguments of method \'%s\' can't be processed", "${domainName}.${commandName}");
- m_backendDispatcher->reportProtocolError(&callId, BackendDispatcher::InvalidParams, errorMessage, WTF::move(protocolErrors));
</del><ins>+"""${inParameterDeclarations}
+ if (m_backendDispatcher->hasProtocolErrors()) {
+ m_backendDispatcher->reportProtocolError(BackendDispatcher::InvalidParams, String::format("Some arguments of method \'%s\' can't be processed", "${domainName}.${commandName}"));
</ins><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx"> """)
</span><span class="lines">@@ -196,7 +198,7 @@
</span><span class="cx"> {
</span><span class="cx"> Ref<InspectorObject> 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"> }""")
</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 " void %s(long callId, const InspectorObject& message);" % command.command_name
</del><ins>+ return " void %s(long requestId, RefPtr<InspectorObject>&& parameters);" % 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"> '<inspector/InspectorFrontendChannel.h>',
</span><span class="cx"> '<inspector/InspectorValues.h>',
</span><ins>+ '<wtf/NeverDestroyed.h>',
</ins><span class="cx"> '<wtf/text/CString.h>']
</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 == "%s")' % 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 == "%s")' % 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("%(parameterKey)s"), %(successOutParam)s, protocolErrors.get());' % param_args)
</del><ins>+ in_parameter_declarations.append(' %(parameterType)s %(parameterName)s = m_backendDispatcher->%(keyedGetMethod)s(parameters.get(), ASCIILiteral("%(parameterKey)s"), %(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->disable();')
</span><del>- out_parameter_assignments.append(' m_backendDispatcher->reportProtocolError(&callId, BackendDispatcher::ServerError, error);')
</del><ins>+ out_parameter_assignments.append(' m_backendDispatcher->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&)' % command_args)
</del><ins>+ lines.append('void %(domainName)sBackendDispatcher::%(commandName)s(long requestId, RefPtr<InspectorObject>&&)' % command_args)
</ins><span class="cx"> else:
</span><del>- lines.append('void %(domainName)sBackendDispatcher::%(commandName)s(long callId, const InspectorObject& message)' % command_args)
</del><ins>+ lines.append('void %(domainName)sBackendDispatcher::%(commandName)s(long requestId, RefPtr<InspectorObject>&& parameters)' % command_args)
</ins><span class="cx"> lines.append('{')
</span><span class="cx">
</span><span class="cx"> if len(command.call_parameters) > 0:
</span><span class="lines">@@ -286,7 +287,7 @@
</span><span class="cx"> lines.append(' ErrorString error;')
</span><span class="cx"> lines.append(' Ref<InspectorObject> result = InspectorObject::create();')
</span><span class="cx"> if command.is_async:
</span><del>- lines.append(' Ref<%(domainName)sBackendDispatcherHandler::%(callbackName)s> callback = adoptRef(*new %(domainName)sBackendDispatcherHandler::%(callbackName)s(m_backendDispatcher.copyRef(), callId));' % command_args)
</del><ins>+ lines.append(' Ref<%(domainName)sBackendDispatcherHandler::%(callbackName)s> callback = adoptRef(*new %(domainName)sBackendDispatcherHandler::%(callbackName)s(m_backendDispatcher.copyRef(), requestId));' % command_args)
</ins><span class="cx"> if len(command.return_parameters) > 0:
</span><span class="cx"> lines.extend(out_parameter_declarations)
</span><span class="cx"> lines.append(' m_agent->%(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->sendResponse(callId, WTF::move(result), error);')
</del><ins>+ lines.append(' if (!error.length())')
+ lines.append(' m_backendDispatcher->sendResponse(requestId, WTF::move(result));')
+ lines.append(' else')
+ lines.append(' m_backendDispatcher->reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));')
</ins><span class="cx"> lines.append('}')
</span><span class="cx"> return "\n".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->%s(ASCIILiteral("%s"), %s);' % (keyed_set_method, parameter.parameter_name, export_expression))
</span><del>- lines.append(' backendDispatcher()->sendResponse(callId, WTF::move(resultObject), String());')
</del><ins>+ lines.append(' backendDispatcher()->sendResponse(requestId, WTF::move(resultObject));')
</ins><span class="cx"> else:
</span><del>- lines.append(' backendDispatcher()->sendResponse(callId, InspectorObject::create(), String());')
</del><ins>+ lines.append(' backendDispatcher()->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"> """void ObjCInspector${domainName}BackendDispatcher::${commandName}(${parameters})
</span><span class="cx"> {
</span><span class="cx"> id errorCallback = ^(NSString *error) {
</span><del>- backendDispatcher()->sendResponse(callId, InspectorObject::create(), error);
</del><ins>+ backendDispatcher()->reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+ backendDispatcher()->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<DatabaseBackendDispatcher> create(BackendDispatcher*, DatabaseBackendDispatcherHandler*);
</span><del>- virtual void dispatch(long callId, const String& method, Ref<InspectorObject>&& message) override;
</del><ins>+ virtual void dispatch(long requestId, const String& method, Ref<InspectorObject>&& message) override;
</ins><span class="cx"> private:
</span><del>- void executeSQLSyncOptionalReturnValues(long callId, const InspectorObject& message);
- void executeSQLAsyncOptionalReturnValues(long callId, const InspectorObject& message);
- void executeSQLSync(long callId, const InspectorObject& message);
- void executeSQLAsync(long callId, const InspectorObject& message);
</del><ins>+ void executeSQLSyncOptionalReturnValues(long requestId, RefPtr<InspectorObject>&& parameters);
+ void executeSQLAsyncOptionalReturnValues(long requestId, RefPtr<InspectorObject>&& parameters);
+ void executeSQLSync(long requestId, RefPtr<InspectorObject>&& parameters);
+ void executeSQLAsync(long requestId, RefPtr<InspectorObject>&& parameters);
</ins><span class="cx"> private:
</span><span class="cx"> DatabaseBackendDispatcher(BackendDispatcher&, 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 <inspector/InspectorFrontendChannel.h>
</span><span class="cx"> #include <inspector/InspectorValues.h>
</span><ins>+#include <wtf/NeverDestroyed.h>
</ins><span class="cx"> #include <wtf/text/CString.h>
</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->registerDispatcherForDomain(ASCIILiteral("Database"), this);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void DatabaseBackendDispatcher::dispatch(long callId, const String& method, Ref<InspectorObject>&& message)
</del><ins>+void DatabaseBackendDispatcher::dispatch(long requestId, const String& method, Ref<InspectorObject>&& message)
</ins><span class="cx"> {
</span><span class="cx"> Ref<DatabaseBackendDispatcher> protect(*this);
</span><span class="cx">
</span><ins>+ RefPtr<InspectorObject> parameters;
+ message->getObject(ASCIILiteral("params"), parameters);
+
</ins><span class="cx"> if (method == "executeSQLSyncOptionalReturnValues")
</span><del>- executeSQLSyncOptionalReturnValues(callId, message);
</del><ins>+ executeSQLSyncOptionalReturnValues(requestId, WTF::move(parameters));
</ins><span class="cx"> else if (method == "executeSQLAsyncOptionalReturnValues")
</span><del>- executeSQLAsyncOptionalReturnValues(callId, message);
</del><ins>+ executeSQLAsyncOptionalReturnValues(requestId, WTF::move(parameters));
</ins><span class="cx"> else if (method == "executeSQLSync")
</span><del>- executeSQLSync(callId, message);
</del><ins>+ executeSQLSync(requestId, WTF::move(parameters));
</ins><span class="cx"> else if (method == "executeSQLAsync")
</span><del>- executeSQLAsync(callId, message);
</del><ins>+ executeSQLAsync(requestId, WTF::move(parameters));
</ins><span class="cx"> else
</span><del>- m_backendDispatcher->reportProtocolError(&callId, BackendDispatcher::MethodNotFound, makeString('\'', "Database", '.', method, "' was not found"));
</del><ins>+ m_backendDispatcher->reportProtocolError(BackendDispatcher::MethodNotFound, makeString('\'', "Database", '.', method, "' was not found"));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void DatabaseBackendDispatcher::executeSQLSyncOptionalReturnValues(long callId, const InspectorObject& message)
</del><ins>+void DatabaseBackendDispatcher::executeSQLSyncOptionalReturnValues(long requestId, RefPtr<InspectorObject>&& parameters)
</ins><span class="cx"> {
</span><del>- auto protocolErrors = Inspector::Protocol::Array<String>::create();
- RefPtr<InspectorObject> paramsContainer;
- message.getObject(ASCIILiteral("params"), paramsContainer);
- int in_databaseId = BackendDispatcher::getInteger(paramsContainer.get(), ASCIILiteral("databaseId"), nullptr, protocolErrors.get());
- String in_query = BackendDispatcher::getString(paramsContainer.get(), ASCIILiteral("query"), nullptr, protocolErrors.get());
- if (protocolErrors->length()) {
- String errorMessage = String::format("Some arguments of method '%s' can't be processed", "Database.executeSQLSyncOptionalReturnValues");
- m_backendDispatcher->reportProtocolError(&callId, BackendDispatcher::InvalidParams, errorMessage, WTF::move(protocolErrors));
</del><ins>+ int in_databaseId = m_backendDispatcher->getInteger(parameters.get(), ASCIILiteral("databaseId"), nullptr);
+ String in_query = m_backendDispatcher->getString(parameters.get(), ASCIILiteral("query"), nullptr);
+ if (m_backendDispatcher->hasProtocolErrors()) {
+ m_backendDispatcher->reportProtocolError(BackendDispatcher::InvalidParams, String::format("Some arguments of method '%s' can't be processed", "Database.executeSQLSyncOptionalReturnValues"));
</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->executeSQLSyncOptionalReturnValues(callId, in_databaseId, in_query);
</del><ins>+ m_alternateDispatcher->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->setString(ASCIILiteral("printColor"), out_printColor.getValue());
</span><span class="cx"> }
</span><del>- m_backendDispatcher->sendResponse(callId, WTF::move(result), error);
</del><ins>+ if (!error.length())
+ m_backendDispatcher->sendResponse(requestId, WTF::move(result));
+ else
+ m_backendDispatcher->reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> DatabaseBackendDispatcherHandler::ExecuteSQLAsyncOptionalReturnValuesCallback::ExecuteSQLAsyncOptionalReturnValuesCallback(Ref<BackendDispatcher>&& backendDispatcher, int id) : BackendDispatcher::CallbackBase(WTF::move(backendDispatcher), id) { }
</span><span class="lines">@@ -370,57 +373,49 @@
</span><span class="cx"> jsonMessage->setArray(ASCIILiteral("alternateColors"), alternateColors);
</span><span class="cx"> if (printColor.isAssigned())
</span><span class="cx"> jsonMessage->setString(ASCIILiteral("printColor"), 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& message)
</del><ins>+void DatabaseBackendDispatcher::executeSQLAsyncOptionalReturnValues(long requestId, RefPtr<InspectorObject>&& parameters)
</ins><span class="cx"> {
</span><del>- auto protocolErrors = Inspector::Protocol::Array<String>::create();
- RefPtr<InspectorObject> paramsContainer;
- message.getObject(ASCIILiteral("params"), paramsContainer);
- int in_databaseId = BackendDispatcher::getInteger(paramsContainer.get(), ASCIILiteral("databaseId"), nullptr, protocolErrors.get());
- String in_query = BackendDispatcher::getString(paramsContainer.get(), ASCIILiteral("query"), nullptr, protocolErrors.get());
- if (protocolErrors->length()) {
- String errorMessage = String::format("Some arguments of method '%s' can't be processed", "Database.executeSQLAsyncOptionalReturnValues");
- m_backendDispatcher->reportProtocolError(&callId, BackendDispatcher::InvalidParams, errorMessage, WTF::move(protocolErrors));
</del><ins>+ int in_databaseId = m_backendDispatcher->getInteger(parameters.get(), ASCIILiteral("databaseId"), nullptr);
+ String in_query = m_backendDispatcher->getString(parameters.get(), ASCIILiteral("query"), nullptr);
+ if (m_backendDispatcher->hasProtocolErrors()) {
+ m_backendDispatcher->reportProtocolError(BackendDispatcher::InvalidParams, String::format("Some arguments of method '%s' can't be processed", "Database.executeSQLAsyncOptionalReturnValues"));
</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->executeSQLAsyncOptionalReturnValues(callId, in_databaseId, in_query);
</del><ins>+ m_alternateDispatcher->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<InspectorObject> result = InspectorObject::create();
</span><del>- Ref<DatabaseBackendDispatcherHandler::ExecuteSQLAsyncOptionalReturnValuesCallback> callback = adoptRef(*new DatabaseBackendDispatcherHandler::ExecuteSQLAsyncOptionalReturnValuesCallback(m_backendDispatcher.copyRef(), callId));
</del><ins>+ Ref<DatabaseBackendDispatcherHandler::ExecuteSQLAsyncOptionalReturnValuesCallback> callback = adoptRef(*new DatabaseBackendDispatcherHandler::ExecuteSQLAsyncOptionalReturnValuesCallback(m_backendDispatcher.copyRef(), requestId));
</ins><span class="cx"> m_agent->executeSQLAsyncOptionalReturnValues(error, in_databaseId, in_query, callback.copyRef());
</span><span class="cx">
</span><span class="cx"> if (error.length()) {
</span><span class="cx"> callback->disable();
</span><del>- m_backendDispatcher->reportProtocolError(&callId, BackendDispatcher::ServerError, error);
</del><ins>+ m_backendDispatcher->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& message)
</del><ins>+void DatabaseBackendDispatcher::executeSQLSync(long requestId, RefPtr<InspectorObject>&& parameters)
</ins><span class="cx"> {
</span><del>- auto protocolErrors = Inspector::Protocol::Array<String>::create();
- RefPtr<InspectorObject> paramsContainer;
- message.getObject(ASCIILiteral("params"), paramsContainer);
- int in_databaseId = BackendDispatcher::getInteger(paramsContainer.get(), ASCIILiteral("databaseId"), nullptr, protocolErrors.get());
- String in_query = BackendDispatcher::getString(paramsContainer.get(), ASCIILiteral("query"), nullptr, protocolErrors.get());
- if (protocolErrors->length()) {
- String errorMessage = String::format("Some arguments of method '%s' can't be processed", "Database.executeSQLSync");
- m_backendDispatcher->reportProtocolError(&callId, BackendDispatcher::InvalidParams, errorMessage, WTF::move(protocolErrors));
</del><ins>+ int in_databaseId = m_backendDispatcher->getInteger(parameters.get(), ASCIILiteral("databaseId"), nullptr);
+ String in_query = m_backendDispatcher->getString(parameters.get(), ASCIILiteral("query"), nullptr);
+ if (m_backendDispatcher->hasProtocolErrors()) {
+ m_backendDispatcher->reportProtocolError(BackendDispatcher::InvalidParams, String::format("Some arguments of method '%s' can't be processed", "Database.executeSQLSync"));
</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->executeSQLSync(callId, in_databaseId, in_query);
</del><ins>+ m_alternateDispatcher->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->setString(ASCIILiteral("screenColor"), Inspector::Protocol::getEnumConstantValue(out_screenColor));
</span><span class="cx"> result->setString(ASCIILiteral("printColor"), Inspector::Protocol::getEnumConstantValue(out_printColor));
</span><span class="cx"> }
</span><del>- m_backendDispatcher->sendResponse(callId, WTF::move(result), error);
</del><ins>+ if (!error.length())
+ m_backendDispatcher->sendResponse(requestId, WTF::move(result));
+ else
+ m_backendDispatcher->reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> DatabaseBackendDispatcherHandler::ExecuteSQLAsyncCallback::ExecuteSQLAsyncCallback(Ref<BackendDispatcher>&& backendDispatcher, int id) : BackendDispatcher::CallbackBase(WTF::move(backendDispatcher), id) { }
</span><span class="lines">@@ -469,37 +467,33 @@
</span><span class="cx"> jsonMessage->setString(ASCIILiteral("screenColor"), Inspector::Protocol::getEnumConstantValue(screenColor));
</span><span class="cx"> jsonMessage->setArray(ASCIILiteral("alternateColors"), alternateColors);
</span><span class="cx"> jsonMessage->setString(ASCIILiteral("printColor"), 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& message)
</del><ins>+void DatabaseBackendDispatcher::executeSQLAsync(long requestId, RefPtr<InspectorObject>&& parameters)
</ins><span class="cx"> {
</span><del>- auto protocolErrors = Inspector::Protocol::Array<String>::create();
- RefPtr<InspectorObject> paramsContainer;
- message.getObject(ASCIILiteral("params"), paramsContainer);
- int in_databaseId = BackendDispatcher::getInteger(paramsContainer.get(), ASCIILiteral("databaseId"), nullptr, protocolErrors.get());
- String in_query = BackendDispatcher::getString(paramsContainer.get(), ASCIILiteral("query"), nullptr, protocolErrors.get());
- if (protocolErrors->length()) {
- String errorMessage = String::format("Some arguments of method '%s' can't be processed", "Database.executeSQLAsync");
- m_backendDispatcher->reportProtocolError(&callId, BackendDispatcher::InvalidParams, errorMessage, WTF::move(protocolErrors));
</del><ins>+ int in_databaseId = m_backendDispatcher->getInteger(parameters.get(), ASCIILiteral("databaseId"), nullptr);
+ String in_query = m_backendDispatcher->getString(parameters.get(), ASCIILiteral("query"), nullptr);
+ if (m_backendDispatcher->hasProtocolErrors()) {
+ m_backendDispatcher->reportProtocolError(BackendDispatcher::InvalidParams, String::format("Some arguments of method '%s' can't be processed", "Database.executeSQLAsync"));
</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->executeSQLAsync(callId, in_databaseId, in_query);
</del><ins>+ m_alternateDispatcher->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<InspectorObject> result = InspectorObject::create();
</span><del>- Ref<DatabaseBackendDispatcherHandler::ExecuteSQLAsyncCallback> callback = adoptRef(*new DatabaseBackendDispatcherHandler::ExecuteSQLAsyncCallback(m_backendDispatcher.copyRef(), callId));
</del><ins>+ Ref<DatabaseBackendDispatcherHandler::ExecuteSQLAsyncCallback> callback = adoptRef(*new DatabaseBackendDispatcherHandler::ExecuteSQLAsyncCallback(m_backendDispatcher.copyRef(), requestId));
</ins><span class="cx"> m_agent->executeSQLAsync(error, in_databaseId, in_query, callback.copyRef());
</span><span class="cx">
</span><span class="cx"> if (error.length()) {
</span><span class="cx"> callback->disable();
</span><del>- m_backendDispatcher->reportProtocolError(&callId, BackendDispatcher::ServerError, error);
</del><ins>+ m_backendDispatcher->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<RWIProtocolDatabaseDomainHandler> handler) { m_delegate = handler; }
</span><del>- virtual void executeSQLSyncOptionalReturnValues(long callId, int in_databaseId, const String& in_query) override;
- virtual void executeSQLAsyncOptionalReturnValues(long callId, int in_databaseId, const String& in_query) override;
- virtual void executeSQLSync(long callId, int in_databaseId, const String& in_query) override;
- virtual void executeSQLAsync(long callId, int in_databaseId, const String& in_query) override;
</del><ins>+ virtual void executeSQLSyncOptionalReturnValues(long requestId, int in_databaseId, const String& in_query) override;
+ virtual void executeSQLAsyncOptionalReturnValues(long requestId, int in_databaseId, const String& in_query) override;
+ virtual void executeSQLSync(long requestId, int in_databaseId, const String& in_query) override;
+ virtual void executeSQLAsync(long requestId, int in_databaseId, const String& in_query) override;
</ins><span class="cx"> private:
</span><span class="cx"> RetainPtr<id<RWIProtocolDatabaseDomainHandler>> 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& in_query)
</del><ins>+void ObjCInspectorDatabaseBackendDispatcher::executeSQLSyncOptionalReturnValues(long requestId, int in_databaseId, const String& in_query)
</ins><span class="cx"> {
</span><span class="cx"> id errorCallback = ^(NSString *error) {
</span><del>- backendDispatcher()->sendResponse(callId, InspectorObject::create(), error);
</del><ins>+ backendDispatcher()->reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+ backendDispatcher()->sendPendingErrors();
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> id successCallback = ^(NSArray/*<NSString>*/ **columnNames, NSString **notes, double *timestamp, RWIProtocolJSONObject **values, RWIProtocolJSONObject **payload, int *databaseId, RWIProtocolDatabaseError **sqlError, RWIProtocolDatabasePrimaryColors *screenColor, NSArray/*<NSString>*/ **alternateColors, RWIProtocolDatabaseExecuteSQLSyncOptionalReturnValuesPrintColor *printColor) {
</span><span class="lines">@@ -1067,7 +1062,7 @@
</span><span class="cx"> resultObject->setArray(ASCIILiteral("alternateColors"), inspectorStringArray(*alternateColors));
</span><span class="cx"> if (printColor)
</span><span class="cx"> resultObject->setString(ASCIILiteral("printColor"), toProtocolString(*printColor));
</span><del>- backendDispatcher()->sendResponse(callId, WTF::move(resultObject), String());
</del><ins>+ backendDispatcher()->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& in_query)
</del><ins>+void ObjCInspectorDatabaseBackendDispatcher::executeSQLAsyncOptionalReturnValues(long requestId, int in_databaseId, const String& in_query)
</ins><span class="cx"> {
</span><span class="cx"> id errorCallback = ^(NSString *error) {
</span><del>- backendDispatcher()->sendResponse(callId, InspectorObject::create(), error);
</del><ins>+ backendDispatcher()->reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+ backendDispatcher()->sendPendingErrors();
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> id successCallback = ^(NSArray/*<NSString>*/ **columnNames, NSString **notes, double *timestamp, RWIProtocolJSONObject **values, RWIProtocolJSONObject **payload, int *databaseId, RWIProtocolDatabaseError **sqlError, RWIProtocolDatabasePrimaryColors *screenColor, NSArray/*<NSString>*/ **alternateColors, RWIProtocolDatabaseExecuteSQLAsyncOptionalReturnValuesPrintColor *printColor) {
</span><span class="lines">@@ -1110,7 +1106,7 @@
</span><span class="cx"> resultObject->setArray(ASCIILiteral("alternateColors"), inspectorStringArray(*alternateColors));
</span><span class="cx"> if (printColor)
</span><span class="cx"> resultObject->setString(ASCIILiteral("printColor"), toProtocolString(*printColor));
</span><del>- backendDispatcher()->sendResponse(callId, WTF::move(resultObject), String());
</del><ins>+ backendDispatcher()->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& in_query)
</del><ins>+void ObjCInspectorDatabaseBackendDispatcher::executeSQLSync(long requestId, int in_databaseId, const String& in_query)
</ins><span class="cx"> {
</span><span class="cx"> id errorCallback = ^(NSString *error) {
</span><del>- backendDispatcher()->sendResponse(callId, InspectorObject::create(), error);
</del><ins>+ backendDispatcher()->reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+ backendDispatcher()->sendPendingErrors();
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> id successCallback = ^(NSArray/*<NSString>*/ *columnNames, NSString *notes, double timestamp, RWIProtocolJSONObject *values, RWIProtocolJSONObject *payload, int databaseId, RWIProtocolDatabaseError *sqlError, NSArray/*<NSString>*/ *alternateColors, RWIProtocolDatabasePrimaryColors screenColor, RWIProtocolDatabaseExecuteSQLSyncPrintColor printColor) {
</span><span class="lines">@@ -1143,7 +1140,7 @@
</span><span class="cx"> resultObject->setArray(ASCIILiteral("alternateColors"), inspectorStringArray(alternateColors));
</span><span class="cx"> resultObject->setString(ASCIILiteral("screenColor"), toProtocolString(screenColor));
</span><span class="cx"> resultObject->setString(ASCIILiteral("printColor"), toProtocolString(printColor));
</span><del>- backendDispatcher()->sendResponse(callId, WTF::move(resultObject), String());
</del><ins>+ backendDispatcher()->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& in_query)
</del><ins>+void ObjCInspectorDatabaseBackendDispatcher::executeSQLAsync(long requestId, int in_databaseId, const String& in_query)
</ins><span class="cx"> {
</span><span class="cx"> id errorCallback = ^(NSString *error) {
</span><del>- backendDispatcher()->sendResponse(callId, InspectorObject::create(), error);
</del><ins>+ backendDispatcher()->reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+ backendDispatcher()->sendPendingErrors();
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> id successCallback = ^(NSArray/*<NSString>*/ *columnNames, NSString *notes, double timestamp, RWIProtocolJSONObject *values, RWIProtocolJSONObject *payload, int databaseId, RWIProtocolDatabaseError *sqlError, RWIProtocolDatabasePrimaryColors screenColor, NSArray/*<NSString>*/ *alternateColors, RWIProtocolDatabaseExecuteSQLAsyncPrintColor printColor) {
</span><span class="lines">@@ -1176,7 +1174,7 @@
</span><span class="cx"> resultObject->setString(ASCIILiteral("screenColor"), toProtocolString(screenColor));
</span><span class="cx"> resultObject->setArray(ASCIILiteral("alternateColors"), inspectorStringArray(alternateColors));
</span><span class="cx"> resultObject->setString(ASCIILiteral("printColor"), toProtocolString(printColor));
</span><del>- backendDispatcher()->sendResponse(callId, WTF::move(resultObject), String());
</del><ins>+ backendDispatcher()->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<DatabaseBackendDispatcher> create(BackendDispatcher*, DatabaseBackendDispatcherHandler*);
</span><del>- virtual void dispatch(long callId, const String& method, Ref<InspectorObject>&& message) override;
</del><ins>+ virtual void dispatch(long requestId, const String& method, Ref<InspectorObject>&& message) override;
</ins><span class="cx"> private:
</span><del>- void executeAllOptionalParameters(long callId, const InspectorObject& message);
- void executeNoOptionalParameters(long callId, const InspectorObject& message);
</del><ins>+ void executeAllOptionalParameters(long requestId, RefPtr<InspectorObject>&& parameters);
+ void executeNoOptionalParameters(long requestId, RefPtr<InspectorObject>&& parameters);
</ins><span class="cx"> private:
</span><span class="cx"> DatabaseBackendDispatcher(BackendDispatcher&, 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 <inspector/InspectorFrontendChannel.h>
</span><span class="cx"> #include <inspector/InspectorValues.h>
</span><ins>+#include <wtf/NeverDestroyed.h>
</ins><span class="cx"> #include <wtf/text/CString.h>
</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->registerDispatcherForDomain(ASCIILiteral("Database"), this);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void DatabaseBackendDispatcher::dispatch(long callId, const String& method, Ref<InspectorObject>&& message)
</del><ins>+void DatabaseBackendDispatcher::dispatch(long requestId, const String& method, Ref<InspectorObject>&& message)
</ins><span class="cx"> {
</span><span class="cx"> Ref<DatabaseBackendDispatcher> protect(*this);
</span><span class="cx">
</span><ins>+ RefPtr<InspectorObject> parameters;
+ message->getObject(ASCIILiteral("params"), parameters);
+
</ins><span class="cx"> if (method == "executeAllOptionalParameters")
</span><del>- executeAllOptionalParameters(callId, message);
</del><ins>+ executeAllOptionalParameters(requestId, WTF::move(parameters));
</ins><span class="cx"> else if (method == "executeNoOptionalParameters")
</span><del>- executeNoOptionalParameters(callId, message);
</del><ins>+ executeNoOptionalParameters(requestId, WTF::move(parameters));
</ins><span class="cx"> else
</span><del>- m_backendDispatcher->reportProtocolError(&callId, BackendDispatcher::MethodNotFound, makeString('\'', "Database", '.', method, "' was not found"));
</del><ins>+ m_backendDispatcher->reportProtocolError(BackendDispatcher::MethodNotFound, makeString('\'', "Database", '.', method, "' was not found"));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void DatabaseBackendDispatcher::executeAllOptionalParameters(long callId, const InspectorObject& message)
</del><ins>+void DatabaseBackendDispatcher::executeAllOptionalParameters(long requestId, RefPtr<InspectorObject>&& parameters)
</ins><span class="cx"> {
</span><del>- auto protocolErrors = Inspector::Protocol::Array<String>::create();
- RefPtr<InspectorObject> paramsContainer;
- message.getObject(ASCIILiteral("params"), paramsContainer);
</del><span class="cx"> bool opt_in_columnNames_valueFound = false;
</span><del>- RefPtr<Inspector::InspectorArray> opt_in_columnNames = BackendDispatcher::getArray(paramsContainer.get(), ASCIILiteral("columnNames"), &opt_in_columnNames_valueFound, protocolErrors.get());
</del><ins>+ RefPtr<Inspector::InspectorArray> opt_in_columnNames = m_backendDispatcher->getArray(parameters.get(), ASCIILiteral("columnNames"), &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("notes"), &opt_in_notes_valueFound, protocolErrors.get());
</del><ins>+ String opt_in_notes = m_backendDispatcher->getString(parameters.get(), ASCIILiteral("notes"), &opt_in_notes_valueFound);
</ins><span class="cx"> bool opt_in_timestamp_valueFound = false;
</span><del>- Inspector::Protocol::OptOutput<double> opt_in_timestamp = BackendDispatcher::getDouble(paramsContainer.get(), ASCIILiteral("timestamp"), &opt_in_timestamp_valueFound, protocolErrors.get());
</del><ins>+ Inspector::Protocol::OptOutput<double> opt_in_timestamp = m_backendDispatcher->getDouble(parameters.get(), ASCIILiteral("timestamp"), &opt_in_timestamp_valueFound);
</ins><span class="cx"> bool opt_in_values_valueFound = false;
</span><del>- RefPtr<Inspector::InspectorObject> opt_in_values = BackendDispatcher::getObject(paramsContainer.get(), ASCIILiteral("values"), &opt_in_values_valueFound, protocolErrors.get());
</del><ins>+ RefPtr<Inspector::InspectorObject> opt_in_values = m_backendDispatcher->getObject(parameters.get(), ASCIILiteral("values"), &opt_in_values_valueFound);
</ins><span class="cx"> bool opt_in_payload_valueFound = false;
</span><del>- RefPtr<Inspector::InspectorValue> opt_in_payload = BackendDispatcher::getValue(paramsContainer.get(), ASCIILiteral("payload"), &opt_in_payload_valueFound, protocolErrors.get());
</del><ins>+ RefPtr<Inspector::InspectorValue> opt_in_payload = m_backendDispatcher->getValue(parameters.get(), ASCIILiteral("payload"), &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("databaseId"), &opt_in_databaseId_valueFound, protocolErrors.get());
</del><ins>+ int opt_in_databaseId = m_backendDispatcher->getInteger(parameters.get(), ASCIILiteral("databaseId"), &opt_in_databaseId_valueFound);
</ins><span class="cx"> bool opt_in_sqlError_valueFound = false;
</span><del>- RefPtr<Inspector::InspectorObject> opt_in_sqlError = BackendDispatcher::getObject(paramsContainer.get(), ASCIILiteral("sqlError"), &opt_in_sqlError_valueFound, protocolErrors.get());
</del><ins>+ RefPtr<Inspector::InspectorObject> opt_in_sqlError = m_backendDispatcher->getObject(parameters.get(), ASCIILiteral("sqlError"), &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("screenColor"), &opt_in_screenColor_valueFound, protocolErrors.get());
</del><ins>+ String opt_in_screenColor = m_backendDispatcher->getString(parameters.get(), ASCIILiteral("screenColor"), &opt_in_screenColor_valueFound);
</ins><span class="cx"> bool opt_in_alternateColors_valueFound = false;
</span><del>- RefPtr<Inspector::InspectorArray> opt_in_alternateColors = BackendDispatcher::getArray(paramsContainer.get(), ASCIILiteral("alternateColors"), &opt_in_alternateColors_valueFound, protocolErrors.get());
</del><ins>+ RefPtr<Inspector::InspectorArray> opt_in_alternateColors = m_backendDispatcher->getArray(parameters.get(), ASCIILiteral("alternateColors"), &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("printColor"), &opt_in_printColor_valueFound, protocolErrors.get());
- if (protocolErrors->length()) {
- String errorMessage = String::format("Some arguments of method '%s' can't be processed", "Database.executeAllOptionalParameters");
- m_backendDispatcher->reportProtocolError(&callId, BackendDispatcher::InvalidParams, errorMessage, WTF::move(protocolErrors));
</del><ins>+ String opt_in_printColor = m_backendDispatcher->getString(parameters.get(), ASCIILiteral("printColor"), &opt_in_printColor_valueFound);
+ if (m_backendDispatcher->hasProtocolErrors()) {
+ m_backendDispatcher->reportProtocolError(BackendDispatcher::InvalidParams, String::format("Some arguments of method '%s' can't be processed", "Database.executeAllOptionalParameters"));
</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->executeAllOptionalParameters(callId, opt_in_columnNames_valueFound ? opt_in_columnNames.get() : nullptr, opt_in_notes_valueFound ? &opt_in_notes : nullptr, opt_in_timestamp_valueFound ? &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 ? &opt_in_databaseId : nullptr, opt_in_sqlError_valueFound ? opt_in_sqlError.get() : nullptr, opt_in_screenColor_valueFound ? &opt_in_screenColor : nullptr, opt_in_alternateColors_valueFound ? opt_in_alternateColors.get() : nullptr, opt_in_printColor_valueFound ? &opt_in_printColor : nullptr);
</del><ins>+ m_alternateDispatcher->executeAllOptionalParameters(requestId, opt_in_columnNames_valueFound ? opt_in_columnNames.get() : nullptr, opt_in_notes_valueFound ? &opt_in_notes : nullptr, opt_in_timestamp_valueFound ? &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 ? &opt_in_databaseId : nullptr, opt_in_sqlError_valueFound ? opt_in_sqlError.get() : nullptr, opt_in_screenColor_valueFound ? &opt_in_screenColor : nullptr, opt_in_alternateColors_valueFound ? opt_in_alternateColors.get() : nullptr, opt_in_printColor_valueFound ? &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->setString(ASCIILiteral("printColor"), out_printColor.getValue());
</span><span class="cx"> }
</span><del>- m_backendDispatcher->sendResponse(callId, WTF::move(result), error);
</del><ins>+ if (!error.length())
+ m_backendDispatcher->sendResponse(requestId, WTF::move(result));
+ else
+ m_backendDispatcher->reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void DatabaseBackendDispatcher::executeNoOptionalParameters(long callId, const InspectorObject& message)
</del><ins>+void DatabaseBackendDispatcher::executeNoOptionalParameters(long requestId, RefPtr<InspectorObject>&& parameters)
</ins><span class="cx"> {
</span><del>- auto protocolErrors = Inspector::Protocol::Array<String>::create();
- RefPtr<InspectorObject> paramsContainer;
- message.getObject(ASCIILiteral("params"), paramsContainer);
- RefPtr<Inspector::InspectorArray> in_columnNames = BackendDispatcher::getArray(paramsContainer.get(), ASCIILiteral("columnNames"), nullptr, protocolErrors.get());
- String in_notes = BackendDispatcher::getString(paramsContainer.get(), ASCIILiteral("notes"), nullptr, protocolErrors.get());
- double in_timestamp = BackendDispatcher::getDouble(paramsContainer.get(), ASCIILiteral("timestamp"), nullptr, protocolErrors.get());
- RefPtr<Inspector::InspectorObject> in_values = BackendDispatcher::getObject(paramsContainer.get(), ASCIILiteral("values"), nullptr, protocolErrors.get());
- RefPtr<Inspector::InspectorValue> in_payload = BackendDispatcher::getValue(paramsContainer.get(), ASCIILiteral("payload"), nullptr, protocolErrors.get());
- int in_databaseId = BackendDispatcher::getInteger(paramsContainer.get(), ASCIILiteral("databaseId"), nullptr, protocolErrors.get());
- RefPtr<Inspector::InspectorObject> in_sqlError = BackendDispatcher::getObject(paramsContainer.get(), ASCIILiteral("sqlError"), nullptr, protocolErrors.get());
- String in_screenColor = BackendDispatcher::getString(paramsContainer.get(), ASCIILiteral("screenColor"), nullptr, protocolErrors.get());
- RefPtr<Inspector::InspectorArray> in_alternateColors = BackendDispatcher::getArray(paramsContainer.get(), ASCIILiteral("alternateColors"), nullptr, protocolErrors.get());
- String in_printColor = BackendDispatcher::getString(paramsContainer.get(), ASCIILiteral("printColor"), nullptr, protocolErrors.get());
- if (protocolErrors->length()) {
- String errorMessage = String::format("Some arguments of method '%s' can't be processed", "Database.executeNoOptionalParameters");
- m_backendDispatcher->reportProtocolError(&callId, BackendDispatcher::InvalidParams, errorMessage, WTF::move(protocolErrors));
</del><ins>+ RefPtr<Inspector::InspectorArray> in_columnNames = m_backendDispatcher->getArray(parameters.get(), ASCIILiteral("columnNames"), nullptr);
+ String in_notes = m_backendDispatcher->getString(parameters.get(), ASCIILiteral("notes"), nullptr);
+ double in_timestamp = m_backendDispatcher->getDouble(parameters.get(), ASCIILiteral("timestamp"), nullptr);
+ RefPtr<Inspector::InspectorObject> in_values = m_backendDispatcher->getObject(parameters.get(), ASCIILiteral("values"), nullptr);
+ RefPtr<Inspector::InspectorValue> in_payload = m_backendDispatcher->getValue(parameters.get(), ASCIILiteral("payload"), nullptr);
+ int in_databaseId = m_backendDispatcher->getInteger(parameters.get(), ASCIILiteral("databaseId"), nullptr);
+ RefPtr<Inspector::InspectorObject> in_sqlError = m_backendDispatcher->getObject(parameters.get(), ASCIILiteral("sqlError"), nullptr);
+ String in_screenColor = m_backendDispatcher->getString(parameters.get(), ASCIILiteral("screenColor"), nullptr);
+ RefPtr<Inspector::InspectorArray> in_alternateColors = m_backendDispatcher->getArray(parameters.get(), ASCIILiteral("alternateColors"), nullptr);
+ String in_printColor = m_backendDispatcher->getString(parameters.get(), ASCIILiteral("printColor"), nullptr);
+ if (m_backendDispatcher->hasProtocolErrors()) {
+ m_backendDispatcher->reportProtocolError(BackendDispatcher::InvalidParams, String::format("Some arguments of method '%s' can't be processed", "Database.executeNoOptionalParameters"));
</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->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->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->setArray(ASCIILiteral("alternateColors"), out_alternateColors);
</span><span class="cx"> result->setString(ASCIILiteral("printColor"), Inspector::Protocol::getEnumConstantValue(out_printColor));
</span><span class="cx"> }
</span><del>- m_backendDispatcher->sendResponse(callId, WTF::move(result), error);
</del><ins>+ if (!error.length())
+ m_backendDispatcher->sendResponse(requestId, WTF::move(result));
+ else
+ m_backendDispatcher->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<RWIProtocolDatabaseDomainHandler> 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& in_columnNames, const String& in_notes, double in_timestamp, const Inspector::InspectorObject& in_values, Inspector::InspectorValue in_payload, int in_databaseId, const Inspector::InspectorObject& in_sqlError, const String& in_screenColor, const Inspector::InspectorArray& in_alternateColors, const String& 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& in_columnNames, const String& in_notes, double in_timestamp, const Inspector::InspectorObject& in_values, Inspector::InspectorValue in_payload, int in_databaseId, const Inspector::InspectorObject& in_sqlError, const String& in_screenColor, const Inspector::InspectorArray& in_alternateColors, const String& in_printColor) override;
</ins><span class="cx"> private:
</span><span class="cx"> RetainPtr<id<RWIProtocolDatabaseDomainHandler>> 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()->sendResponse(callId, InspectorObject::create(), error);
</del><ins>+ backendDispatcher()->reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+ backendDispatcher()->sendPendingErrors();
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> id successCallback = ^(NSArray/*<NSString>*/ **columnNames, NSString **notes, double *timestamp, RWIProtocolJSONObject **values, RWIProtocolJSONObject **payload, int *databaseId, RWIProtocolDatabaseError **sqlError, RWIProtocolDatabasePrimaryColors *screenColor, NSArray/*<NSString>*/ **alternateColors, RWIProtocolDatabaseExecuteAllOptionalParametersPrintColor *printColor) {
</span><span class="lines">@@ -958,7 +961,7 @@
</span><span class="cx"> resultObject->setArray(ASCIILiteral("alternateColors"), inspectorStringArray(*alternateColors));
</span><span class="cx"> if (printColor)
</span><span class="cx"> resultObject->setString(ASCIILiteral("printColor"), toProtocolString(*printColor));
</span><del>- backendDispatcher()->sendResponse(callId, WTF::move(resultObject), String());
</del><ins>+ backendDispatcher()->sendResponse(requestId, WTF::move(resultObject));
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> NSArray/*<NSString>*/ *o_in_columnNames;
</span><span class="lines">@@ -995,10 +998,11 @@
</span><span class="cx"> [m_delegate executeAllOptionalParametersWithErrorCallback:errorCallback successCallback:successCallback columnNames:(in_columnNames ? &o_in_columnNames : nil) notes:(in_notes ? &o_in_notes : nil) timestamp:(in_timestamp ? &o_in_timestamp : nil) values:(in_values ? &o_in_values : nil) payload:(in_payload ? &o_in_payload : nil) databaseId:(in_databaseId ? &o_in_databaseId : nil) sqlError:(in_sqlError ? &o_in_sqlError : nil) screenColor:(in_screenColor ? &o_in_screenColor : nil) alternateColors:(in_alternateColors ? &o_in_alternateColors : nil) printColor:(in_printColor ? &o_in_printColor : nil)];
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void ObjCInspectorDatabaseBackendDispatcher::executeNoOptionalParameters(long callId, const Inspector::InspectorArray& in_columnNames, const String& in_notes, double in_timestamp, const Inspector::InspectorObject& in_values, Inspector::InspectorValue in_payload, 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::executeNoOptionalParameters(long requestId, const Inspector::InspectorArray& in_columnNames, const String& in_notes, double in_timestamp, const Inspector::InspectorObject& in_values, Inspector::InspectorValue in_payload, 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()->sendResponse(callId, InspectorObject::create(), error);
</del><ins>+ backendDispatcher()->reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+ backendDispatcher()->sendPendingErrors();
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> id successCallback = ^(NSArray/*<NSString>*/ *columnNames, NSString *notes, double timestamp, RWIProtocolJSONObject *values, RWIProtocolJSONObject *payload, int databaseId, RWIProtocolDatabaseError *sqlError, RWIProtocolDatabasePrimaryColors screenColor, NSArray/*<NSString>*/ *alternateColors, RWIProtocolDatabaseExecuteNoOptionalParametersPrintColor printColor) {
</span><span class="lines">@@ -1019,7 +1023,7 @@
</span><span class="cx"> resultObject->setString(ASCIILiteral("screenColor"), toProtocolString(screenColor));
</span><span class="cx"> resultObject->setArray(ASCIILiteral("alternateColors"), inspectorStringArray(alternateColors));
</span><span class="cx"> resultObject->setString(ASCIILiteral("printColor"), toProtocolString(printColor));
</span><del>- backendDispatcher()->sendResponse(callId, WTF::move(resultObject), String());
</del><ins>+ backendDispatcher()->sendResponse(requestId, WTF::move(resultObject));
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> NSArray/*<NSString>*/ *o_in_columnNames = objcStringArray(&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<Network1BackendDispatcher> create(BackendDispatcher*, Network1BackendDispatcherHandler*);
</span><del>- virtual void dispatch(long callId, const String& method, Ref<InspectorObject>&& message) override;
</del><ins>+ virtual void dispatch(long requestId, const String& method, Ref<InspectorObject>&& message) override;
</ins><span class="cx"> private:
</span><del>- void loadResource1(long callId, const InspectorObject& message);
</del><ins>+ void loadResource1(long requestId, RefPtr<InspectorObject>&& parameters);
</ins><span class="cx"> private:
</span><span class="cx"> Network1BackendDispatcher(BackendDispatcher&, 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<Network3BackendDispatcher> create(BackendDispatcher*, Network3BackendDispatcherHandler*);
</span><del>- virtual void dispatch(long callId, const String& method, Ref<InspectorObject>&& message) override;
</del><ins>+ virtual void dispatch(long requestId, const String& method, Ref<InspectorObject>&& message) override;
</ins><span class="cx"> private:
</span><del>- void loadResource1(long callId, const InspectorObject& message);
- void loadResource2(long callId, const InspectorObject& message);
- void loadResource3(long callId, const InspectorObject& message);
- void loadResource4(long callId, const InspectorObject& message);
- void loadResource5(long callId, const InspectorObject& message);
- void loadResource6(long callId, const InspectorObject& message);
- void loadResource7(long callId, const InspectorObject& message);
</del><ins>+ void loadResource1(long requestId, RefPtr<InspectorObject>&& parameters);
+ void loadResource2(long requestId, RefPtr<InspectorObject>&& parameters);
+ void loadResource3(long requestId, RefPtr<InspectorObject>&& parameters);
+ void loadResource4(long requestId, RefPtr<InspectorObject>&& parameters);
+ void loadResource5(long requestId, RefPtr<InspectorObject>&& parameters);
+ void loadResource6(long requestId, RefPtr<InspectorObject>&& parameters);
+ void loadResource7(long requestId, RefPtr<InspectorObject>&& parameters);
</ins><span class="cx"> private:
</span><span class="cx"> Network3BackendDispatcher(BackendDispatcher&, 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 <inspector/InspectorFrontendChannel.h>
</span><span class="cx"> #include <inspector/InspectorValues.h>
</span><ins>+#include <wtf/NeverDestroyed.h>
</ins><span class="cx"> #include <wtf/text/CString.h>
</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->registerDispatcherForDomain(ASCIILiteral("Network1"), this);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void Network1BackendDispatcher::dispatch(long callId, const String& method, Ref<InspectorObject>&& message)
</del><ins>+void Network1BackendDispatcher::dispatch(long requestId, const String& method, Ref<InspectorObject>&& message)
</ins><span class="cx"> {
</span><span class="cx"> Ref<Network1BackendDispatcher> protect(*this);
</span><span class="cx">
</span><ins>+ RefPtr<InspectorObject> parameters;
+ message->getObject(ASCIILiteral("params"), parameters);
+
</ins><span class="cx"> if (method == "loadResource1")
</span><del>- loadResource1(callId, message);
</del><ins>+ loadResource1(requestId, WTF::move(parameters));
</ins><span class="cx"> else
</span><del>- m_backendDispatcher->reportProtocolError(&callId, BackendDispatcher::MethodNotFound, makeString('\'', "Network1", '.', method, "' was not found"));
</del><ins>+ m_backendDispatcher->reportProtocolError(BackendDispatcher::MethodNotFound, makeString('\'', "Network1", '.', method, "' was not found"));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void Network1BackendDispatcher::loadResource1(long callId, const InspectorObject&)
</del><ins>+void Network1BackendDispatcher::loadResource1(long requestId, RefPtr<InspectorObject>&&)
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx"> if (m_alternateDispatcher) {
</span><del>- m_alternateDispatcher->loadResource1(callId);
</del><ins>+ m_alternateDispatcher->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<InspectorObject> result = InspectorObject::create();
</span><span class="cx"> m_agent->loadResource1(error);
</span><span class="cx">
</span><del>- m_backendDispatcher->sendResponse(callId, WTF::move(result), error);
</del><ins>+ if (!error.length())
+ m_backendDispatcher->sendResponse(requestId, WTF::move(result));
+ else
+ m_backendDispatcher->reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> Ref<Network3BackendDispatcher> Network3BackendDispatcher::create(BackendDispatcher* backendDispatcher, Network3BackendDispatcherHandler* agent)
</span><span class="lines">@@ -333,14 +340,17 @@
</span><span class="cx"> m_backendDispatcher->registerDispatcherForDomain(ASCIILiteral("Network3"), this);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void Network3BackendDispatcher::dispatch(long callId, const String& method, Ref<InspectorObject>&& message)
</del><ins>+void Network3BackendDispatcher::dispatch(long requestId, const String& method, Ref<InspectorObject>&& message)
</ins><span class="cx"> {
</span><span class="cx"> Ref<Network3BackendDispatcher> protect(*this);
</span><span class="cx">
</span><del>- typedef void (Network3BackendDispatcher::*CallHandler)(long callId, const InspectorObject& message);
</del><ins>+ RefPtr<InspectorObject> parameters;
+ message->getObject(ASCIILiteral("params"), parameters);
+
+ typedef void (Network3BackendDispatcher::*CallHandler)(long requestId, RefPtr<InspectorObject>&& message);
</ins><span class="cx"> typedef HashMap<String, CallHandler> DispatchMap;
</span><del>- DEPRECATED_DEFINE_STATIC_LOCAL(DispatchMap, dispatchMap, ());
- if (dispatchMap.isEmpty()) {
</del><ins>+ static NeverDestroyed<DispatchMap> 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 < 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<String, CallHandler>::iterator it = dispatchMap.find(method);
- if (it == dispatchMap.end()) {
- m_backendDispatcher->reportProtocolError(&callId, BackendDispatcher::MethodNotFound, makeString('\'', "Network3", '.', method, "' was not found"));
</del><ins>+ auto findResult = dispatchMap.get().find(method);
+ if (findResult == dispatchMap.get().end()) {
+ m_backendDispatcher->reportProtocolError(BackendDispatcher::MethodNotFound, makeString('\'', "Network3", '.', method, "' was not found"));
</ins><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- ((*this).*it->value)(callId, message.get());
</del><ins>+ ((*this).*findResult->value)(requestId, WTF::move(parameters));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void Network3BackendDispatcher::loadResource1(long callId, const InspectorObject&)
</del><ins>+void Network3BackendDispatcher::loadResource1(long requestId, RefPtr<InspectorObject>&&)
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx"> if (m_alternateDispatcher) {
</span><del>- m_alternateDispatcher->loadResource1(callId);
</del><ins>+ m_alternateDispatcher->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<InspectorObject> result = InspectorObject::create();
</span><span class="cx"> m_agent->loadResource1(error);
</span><span class="cx">
</span><del>- m_backendDispatcher->sendResponse(callId, WTF::move(result), error);
</del><ins>+ if (!error.length())
+ m_backendDispatcher->sendResponse(requestId, WTF::move(result));
+ else
+ m_backendDispatcher->reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void Network3BackendDispatcher::loadResource2(long callId, const InspectorObject&)
</del><ins>+void Network3BackendDispatcher::loadResource2(long requestId, RefPtr<InspectorObject>&&)
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx"> if (m_alternateDispatcher) {
</span><del>- m_alternateDispatcher->loadResource2(callId);
</del><ins>+ m_alternateDispatcher->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<InspectorObject> result = InspectorObject::create();
</span><span class="cx"> m_agent->loadResource2(error);
</span><span class="cx">
</span><del>- m_backendDispatcher->sendResponse(callId, WTF::move(result), error);
</del><ins>+ if (!error.length())
+ m_backendDispatcher->sendResponse(requestId, WTF::move(result));
+ else
+ m_backendDispatcher->reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void Network3BackendDispatcher::loadResource3(long callId, const InspectorObject&)
</del><ins>+void Network3BackendDispatcher::loadResource3(long requestId, RefPtr<InspectorObject>&&)
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx"> if (m_alternateDispatcher) {
</span><del>- m_alternateDispatcher->loadResource3(callId);
</del><ins>+ m_alternateDispatcher->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<InspectorObject> result = InspectorObject::create();
</span><span class="cx"> m_agent->loadResource3(error);
</span><span class="cx">
</span><del>- m_backendDispatcher->sendResponse(callId, WTF::move(result), error);
</del><ins>+ if (!error.length())
+ m_backendDispatcher->sendResponse(requestId, WTF::move(result));
+ else
+ m_backendDispatcher->reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void Network3BackendDispatcher::loadResource4(long callId, const InspectorObject&)
</del><ins>+void Network3BackendDispatcher::loadResource4(long requestId, RefPtr<InspectorObject>&&)
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx"> if (m_alternateDispatcher) {
</span><del>- m_alternateDispatcher->loadResource4(callId);
</del><ins>+ m_alternateDispatcher->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<InspectorObject> result = InspectorObject::create();
</span><span class="cx"> m_agent->loadResource4(error);
</span><span class="cx">
</span><del>- m_backendDispatcher->sendResponse(callId, WTF::move(result), error);
</del><ins>+ if (!error.length())
+ m_backendDispatcher->sendResponse(requestId, WTF::move(result));
+ else
+ m_backendDispatcher->reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void Network3BackendDispatcher::loadResource5(long callId, const InspectorObject&)
</del><ins>+void Network3BackendDispatcher::loadResource5(long requestId, RefPtr<InspectorObject>&&)
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx"> if (m_alternateDispatcher) {
</span><del>- m_alternateDispatcher->loadResource5(callId);
</del><ins>+ m_alternateDispatcher->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<InspectorObject> result = InspectorObject::create();
</span><span class="cx"> m_agent->loadResource5(error);
</span><span class="cx">
</span><del>- m_backendDispatcher->sendResponse(callId, WTF::move(result), error);
</del><ins>+ if (!error.length())
+ m_backendDispatcher->sendResponse(requestId, WTF::move(result));
+ else
+ m_backendDispatcher->reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void Network3BackendDispatcher::loadResource6(long callId, const InspectorObject&)
</del><ins>+void Network3BackendDispatcher::loadResource6(long requestId, RefPtr<InspectorObject>&&)
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx"> if (m_alternateDispatcher) {
</span><del>- m_alternateDispatcher->loadResource6(callId);
</del><ins>+ m_alternateDispatcher->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<InspectorObject> result = InspectorObject::create();
</span><span class="cx"> m_agent->loadResource6(error);
</span><span class="cx">
</span><del>- m_backendDispatcher->sendResponse(callId, WTF::move(result), error);
</del><ins>+ if (!error.length())
+ m_backendDispatcher->sendResponse(requestId, WTF::move(result));
+ else
+ m_backendDispatcher->reportProtocolError(BackendDispatcher::ServerError, WTF::move(error));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void Network3BackendDispatcher::loadResource7(long callId, const InspectorObject&)
</del><ins>+void Network3BackendDispatcher::loadResource7(long requestId, RefPtr<InspectorObject>&&)
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx"> if (m_alternateDispatcher) {
</span><del>- m_alternateDispatcher->loadResource7(callId);
</del><ins>+ m_alternateDispatcher->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<InspectorObject> result = InspectorObject::create();
</span><span class="cx"> m_agent->loadResource7(error);
</span><span class="cx">
</span><del>- m_backendDispatcher->sendResponse(callId, WTF::move(result), error);
</del><ins>+ if (!error.length())
+ m_backendDispatcher->sendResponse(requestId, WTF::move(result));
+ else
+ m_backendDispatcher->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<RWIProtocolNetwork1DomainHandler> 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<id<RWIProtocolNetwork1DomainHandler>> 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<RWIProtocolNetwork3DomainHandler> 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<id<RWIProtocolNetwork3DomainHandler>> 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()->sendResponse(callId, InspectorObject::create(), error);
</del><ins>+ backendDispatcher()->reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+ backendDispatcher()->sendPendingErrors();
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> id successCallback = ^{
</span><del>- backendDispatcher()->sendResponse(callId, InspectorObject::create(), String());
</del><ins>+ backendDispatcher()->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()->sendResponse(callId, InspectorObject::create(), error);
</del><ins>+ backendDispatcher()->reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+ backendDispatcher()->sendPendingErrors();
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> id successCallback = ^{
</span><del>- backendDispatcher()->sendResponse(callId, InspectorObject::create(), String());
</del><ins>+ backendDispatcher()->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()->sendResponse(callId, InspectorObject::create(), error);
</del><ins>+ backendDispatcher()->reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+ backendDispatcher()->sendPendingErrors();
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> id successCallback = ^{
</span><del>- backendDispatcher()->sendResponse(callId, InspectorObject::create(), String());
</del><ins>+ backendDispatcher()->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()->sendResponse(callId, InspectorObject::create(), error);
</del><ins>+ backendDispatcher()->reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+ backendDispatcher()->sendPendingErrors();
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> id successCallback = ^{
</span><del>- backendDispatcher()->sendResponse(callId, InspectorObject::create(), String());
</del><ins>+ backendDispatcher()->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()->sendResponse(callId, InspectorObject::create(), error);
</del><ins>+ backendDispatcher()->reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+ backendDispatcher()->sendPendingErrors();
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> id successCallback = ^{
</span><del>- backendDispatcher()->sendResponse(callId, InspectorObject::create(), String());
</del><ins>+ backendDispatcher()->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()->sendResponse(callId, InspectorObject::create(), error);
</del><ins>+ backendDispatcher()->reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+ backendDispatcher()->sendPendingErrors();
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> id successCallback = ^{
</span><del>- backendDispatcher()->sendResponse(callId, InspectorObject::create(), String());
</del><ins>+ backendDispatcher()->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()->sendResponse(callId, InspectorObject::create(), error);
</del><ins>+ backendDispatcher()->reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+ backendDispatcher()->sendPendingErrors();
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> id successCallback = ^{
</span><del>- backendDispatcher()->sendResponse(callId, InspectorObject::create(), String());
</del><ins>+ backendDispatcher()->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()->sendResponse(callId, InspectorObject::create(), error);
</del><ins>+ backendDispatcher()->reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+ backendDispatcher()->sendPendingErrors();
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> id successCallback = ^{
</span><del>- backendDispatcher()->sendResponse(callId, InspectorObject::create(), String());
</del><ins>+ backendDispatcher()->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<CommandDomainBackendDispatcher> create(BackendDispatcher*, CommandDomainBackendDispatcherHandler*);
</span><del>- virtual void dispatch(long callId, const String& method, Ref<InspectorObject>&& message) override;
</del><ins>+ virtual void dispatch(long requestId, const String& method, Ref<InspectorObject>&& message) override;
</ins><span class="cx"> private:
</span><del>- void commandWithEnumReturnValue(long callId, const InspectorObject& message);
</del><ins>+ void commandWithEnumReturnValue(long requestId, RefPtr<InspectorObject>&& parameters);
</ins><span class="cx"> private:
</span><span class="cx"> CommandDomainBackendDispatcher(BackendDispatcher&, 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 <inspector/InspectorFrontendChannel.h>
</span><span class="cx"> #include <inspector/InspectorValues.h>
</span><ins>+#include <wtf/NeverDestroyed.h>
</ins><span class="cx"> #include <wtf/text/CString.h>
</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->registerDispatcherForDomain(ASCIILiteral("CommandDomain"), this);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void CommandDomainBackendDispatcher::dispatch(long callId, const String& method, Ref<InspectorObject>&& message)
</del><ins>+void CommandDomainBackendDispatcher::dispatch(long requestId, const String& method, Ref<InspectorObject>&& message)
</ins><span class="cx"> {
</span><span class="cx"> Ref<CommandDomainBackendDispatcher> protect(*this);
</span><span class="cx">
</span><ins>+ RefPtr<InspectorObject> parameters;
+ message->getObject(ASCIILiteral("params"), parameters);
+
</ins><span class="cx"> if (method == "commandWithEnumReturnValue")
</span><del>- commandWithEnumReturnValue(callId, message);
</del><ins>+ commandWithEnumReturnValue(requestId, WTF::move(parameters));
</ins><span class="cx"> else
</span><del>- m_backendDispatcher->reportProtocolError(&callId, BackendDispatcher::MethodNotFound, makeString('\'', "CommandDomain", '.', method, "' was not found"));
</del><ins>+ m_backendDispatcher->reportProtocolError(BackendDispatcher::MethodNotFound, makeString('\'', "CommandDomain", '.', method, "' was not found"));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void CommandDomainBackendDispatcher::commandWithEnumReturnValue(long callId, const InspectorObject&)
</del><ins>+void CommandDomainBackendDispatcher::commandWithEnumReturnValue(long requestId, RefPtr<InspectorObject>&&)
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx"> if (m_alternateDispatcher) {
</span><del>- m_alternateDispatcher->commandWithEnumReturnValue(callId);
</del><ins>+ m_alternateDispatcher->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->setString(ASCIILiteral("returnValue"), Inspector::Protocol::getEnumConstantValue(out_returnValue));
</span><span class="cx">
</span><del>- m_backendDispatcher->sendResponse(callId, WTF::move(result), error);
</del><ins>+ if (!error.length())
+ m_backendDispatcher->sendResponse(requestId, WTF::move(result));
+ else
+ m_backendDispatcher->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<RWIProtocolCommandDomainDomainHandler> 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<id<RWIProtocolCommandDomainDomainHandler>> 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()->sendResponse(callId, InspectorObject::create(), error);
</del><ins>+ backendDispatcher()->reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+ backendDispatcher()->sendPendingErrors();
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> id successCallback = ^(RWIProtocolCommandDomainCommandWithEnumReturnValueReturnValue returnValue) {
</span><span class="cx"> Ref<InspectorObject> resultObject = InspectorObject::create();
</span><span class="cx"> resultObject->setString(ASCIILiteral("returnValue"), toProtocolString(returnValue));
</span><del>- backendDispatcher()->sendResponse(callId, WTF::move(resultObject), String());
</del><ins>+ backendDispatcher()->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 <inspector/InspectorFrontendChannel.h>
</span><span class="cx"> #include <inspector/InspectorValues.h>
</span><ins>+#include <wtf/NeverDestroyed.h>
</ins><span class="cx"> #include <wtf/text/CString.h>
</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<Network1BackendDispatcher> create(BackendDispatcher*, Network1BackendDispatcherHandler*);
</span><del>- virtual void dispatch(long callId, const String& method, Ref<InspectorObject>&& message) override;
</del><ins>+ virtual void dispatch(long requestId, const String& method, Ref<InspectorObject>&& message) override;
</ins><span class="cx"> private:
</span><del>- void loadResource(long callId, const InspectorObject& message);
</del><ins>+ void loadResource(long requestId, RefPtr<InspectorObject>&& parameters);
</ins><span class="cx"> private:
</span><span class="cx"> Network1BackendDispatcher(BackendDispatcher&, 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 <inspector/InspectorFrontendChannel.h>
</span><span class="cx"> #include <inspector/InspectorValues.h>
</span><ins>+#include <wtf/NeverDestroyed.h>
</ins><span class="cx"> #include <wtf/text/CString.h>
</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->registerDispatcherForDomain(ASCIILiteral("Network1"), this);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void Network1BackendDispatcher::dispatch(long callId, const String& method, Ref<InspectorObject>&& message)
</del><ins>+void Network1BackendDispatcher::dispatch(long requestId, const String& method, Ref<InspectorObject>&& message)
</ins><span class="cx"> {
</span><span class="cx"> Ref<Network1BackendDispatcher> protect(*this);
</span><span class="cx">
</span><ins>+ RefPtr<InspectorObject> parameters;
+ message->getObject(ASCIILiteral("params"), parameters);
+
</ins><span class="cx"> if (method == "loadResource")
</span><del>- loadResource(callId, message);
</del><ins>+ loadResource(requestId, WTF::move(parameters));
</ins><span class="cx"> else
</span><del>- m_backendDispatcher->reportProtocolError(&callId, BackendDispatcher::MethodNotFound, makeString('\'', "Network1", '.', method, "' was not found"));
</del><ins>+ m_backendDispatcher->reportProtocolError(BackendDispatcher::MethodNotFound, makeString('\'', "Network1", '.', method, "' was not found"));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void Network1BackendDispatcher::loadResource(long callId, const InspectorObject&)
</del><ins>+void Network1BackendDispatcher::loadResource(long requestId, RefPtr<InspectorObject>&&)
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><span class="cx"> if (m_alternateDispatcher) {
</span><del>- m_alternateDispatcher->loadResource(callId);
</del><ins>+ m_alternateDispatcher->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<InspectorObject> result = InspectorObject::create();
</span><span class="cx"> m_agent->loadResource(error);
</span><span class="cx">
</span><del>- m_backendDispatcher->sendResponse(callId, WTF::move(result), error);
</del><ins>+ if (!error.length())
+ m_backendDispatcher->sendResponse(requestId, WTF::move(result));
+ else
+ m_backendDispatcher->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<RWIProtocolNetwork1DomainHandler> 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<id<RWIProtocolNetwork1DomainHandler>> 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()->sendResponse(callId, InspectorObject::create(), error);
</del><ins>+ backendDispatcher()->reportProtocolError(requestId, BackendDispatcher::ServerError, error);
+ backendDispatcher()->sendPendingErrors();
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> id successCallback = ^{
</span><del>- backendDispatcher()->sendResponse(callId, InspectorObject::create(), String());
</del><ins>+ backendDispatcher()->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 <inspector/InspectorFrontendChannel.h>
</span><span class="cx"> #include <inspector/InspectorValues.h>
</span><ins>+#include <wtf/NeverDestroyed.h>
</ins><span class="cx"> #include <wtf/text/CString.h>
</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 <inspector/InspectorFrontendChannel.h>
</span><span class="cx"> #include <inspector/InspectorValues.h>
</span><ins>+#include <wtf/NeverDestroyed.h>
</ins><span class="cx"> #include <wtf/text/CString.h>
</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 <inspector/InspectorFrontendChannel.h>
</span><span class="cx"> #include <inspector/InspectorValues.h>
</span><ins>+#include <wtf/NeverDestroyed.h>
</ins><span class="cx"> #include <wtf/text/CString.h>
</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 <inspector/InspectorFrontendChannel.h>
</span><span class="cx"> #include <inspector/InspectorValues.h>
</span><ins>+#include <wtf/NeverDestroyed.h>
</ins><span class="cx"> #include <wtf/text/CString.h>
</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 <inspector/InspectorFrontendChannel.h>
</span><span class="cx"> #include <inspector/InspectorValues.h>
</span><ins>+#include <wtf/NeverDestroyed.h>
</ins><span class="cx"> #include <wtf/text/CString.h>
</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 <inspector/InspectorFrontendChannel.h>
</span><span class="cx"> #include <inspector/InspectorValues.h>
</span><ins>+#include <wtf/NeverDestroyed.h>
</ins><span class="cx"> #include <wtf/text/CString.h>
</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 <inspector/InspectorFrontendChannel.h>
</span><span class="cx"> #include <inspector/InspectorValues.h>
</span><ins>+#include <wtf/NeverDestroyed.h>
</ins><span class="cx"> #include <wtf/text/CString.h>
</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 <timothy@apple.com>
</span><span class="cx">
</span><ins>+ Merge r188965. rdar://problem/23221163
+
+ 2015-08-25 Brian Burg <bburg@apple.com>
+
+ 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 <timothy@apple.com>
+
</ins><span class="cx"> Merge r188964. rdar://problem/23221163
</span><span class="cx">
</span><span class="cx"> 2015-08-26 Matt Baker <mattbaker@apple.com>
</span></span></pre>
</div>
</div>
</body>
</html>