<!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>[174113] trunk/Source</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/174113">174113</a></dd>
<dt>Author</dt> <dd>burg@cs.washington.edu</dd>
<dt>Date</dt> <dd>2014-09-30 12:21:25 -0700 (Tue, 30 Sep 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>Web Replay: use static Strings instead of AtomicStrings for replay input type tags
https://bugs.webkit.org/show_bug.cgi?id=137086
Reviewed by Joseph Pecoraro.
Source/JavaScriptCore:
This pattern doesn't work when we want to define some inputs in WebKit2.
The ReplayInputTypes class was generated from WebCore inputs only. This
patch moves all input traits to use static local Strings as type tags.
* replay/scripts/CodeGeneratorReplayInputs.py: Remove configuration of how
type tags are generated, since all framework targets now generate the same code.
* replay/NondeterministicInput.h:
* replay/scripts/CodeGeneratorReplayInputs.py: Simplify and rebase test results.
(Generator.generate_input_trait_implementation):
* replay/scripts/CodeGeneratorReplayInputsTemplates.py: Simplify templates.
* replay/scripts/tests/expected/generate-enum-encoding-helpers-with-guarded-values.json-TestReplayInputs.cpp:
(JSC::InputTraits<Test::SavedMouseButton>::type):
* replay/scripts/tests/expected/generate-enum-encoding-helpers-with-guarded-values.json-TestReplayInputs.h:
* replay/scripts/tests/expected/generate-enum-encoding-helpers.json-TestReplayInputs.cpp:
(JSC::InputTraits<Test::SavedMouseButton>::type):
* replay/scripts/tests/expected/generate-enum-encoding-helpers.json-TestReplayInputs.h:
* replay/scripts/tests/expected/generate-enum-with-guard.json-TestReplayInputs.cpp:
(JSC::InputTraits<Test::HandleWheelEvent>::type):
* replay/scripts/tests/expected/generate-enum-with-guard.json-TestReplayInputs.h:
* replay/scripts/tests/expected/generate-enums-with-same-base-name.json-TestReplayInputs.cpp:
(JSC::InputTraits<Test::FormCombo>::type):
* replay/scripts/tests/expected/generate-enums-with-same-base-name.json-TestReplayInputs.h:
* replay/scripts/tests/expected/generate-input-with-guard.json-TestReplayInputs.cpp:
(JSC::InputTraits<Test::GetCurrentTime>::type):
(JSC::InputTraits<Test::SetRandomSeed>::type):
* replay/scripts/tests/expected/generate-input-with-guard.json-TestReplayInputs.h:
* replay/scripts/tests/expected/generate-input-with-vector-members.json-TestReplayInputs.cpp:
(JSC::InputTraits<Test::ArrayOfThings>::type):
(JSC::InputTraits<Test::SavedHistory>::type):
* replay/scripts/tests/expected/generate-input-with-vector-members.json-TestReplayInputs.h:
* replay/scripts/tests/expected/generate-inputs-with-flags.json-TestReplayInputs.cpp:
(JSC::InputTraits<Test::ScalarInput1>::type):
(JSC::InputTraits<Test::ScalarInput2>::type):
* replay/scripts/tests/expected/generate-inputs-with-flags.json-TestReplayInputs.h:
* replay/scripts/tests/expected/generate-memoized-type-modes.json-TestReplayInputs.cpp:
(JSC::InputTraits<Test::ScalarInput>::type):
(JSC::InputTraits<Test::MapInput>::type):
* replay/scripts/tests/expected/generate-memoized-type-modes.json-TestReplayInputs.h:
Source/WebCore:
This pattern doesn't work when we want to define some inputs in WebKit2,
since the ReplayInputTypes class is generated from WebCore inputs only.
Replace tag-checking uses of ReplayInputTypes with InputTraits<T>::type().
Remove thread-local input types, and switch to using a plain const String instead
of const AtomicString.
No new tests, no behavior changed.
* CMakeLists.txt:
* WebCore.xcodeproj/project.pbxproj:
* inspector/InspectorReplayAgent.cpp:
(WebCore::SerializeInputToJSONFunctor::operator()):
* platform/ThreadGlobalData.cpp:
(WebCore::ThreadGlobalData::ThreadGlobalData):
(WebCore::ThreadGlobalData::destroy):
* platform/ThreadGlobalData.h:
(WebCore::ThreadGlobalData::inputTypes): Deleted.
* replay/AllReplayInputs.h:
* replay/EventLoopInput.h:
* replay/EventLoopInputDispatcher.cpp:
(WebCore::EventLoopInputDispatcher::dispatchInput):
* replay/MemoizedDOMResult.cpp:
(WebCore::MemoizedDOMResultBase::type):
(JSC::InputTraits<MemoizedDOMResultBase>::type):
* replay/MemoizedDOMResult.h:
* replay/ReplayInputTypes.cpp: Removed.
* replay/ReplayInputTypes.h: Removed.
* replay/ReplayingInputCursor.cpp:
(WebCore::ReplayingInputCursor::loadInput):
* replay/SegmentedInputStorage.cpp:
(WebCore::SegmentedInputStorage::load):
(WebCore::SegmentedInputStorage::store):
* replay/SerializationMethods.cpp:
(JSC::EncodingTraits<NondeterministicInputBase>::encodeValue):
(JSC::EncodingTraits<NondeterministicInputBase>::decodeValue):</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCorereplayNondeterministicInputh">trunk/Source/JavaScriptCore/replay/NondeterministicInput.h</a></li>
<li><a href="#trunkSourceJavaScriptCorereplayscriptsCodeGeneratorReplayInputspy">trunk/Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputs.py</a></li>
<li><a href="#trunkSourceJavaScriptCorereplayscriptsCodeGeneratorReplayInputsTemplatespy">trunk/Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputsTemplates.py</a></li>
<li><a href="#trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateenumencodinghelperswithguardedvaluesjsonTestReplayInputscpp">trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enum-encoding-helpers-with-guarded-values.json-TestReplayInputs.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateenumencodinghelperswithguardedvaluesjsonTestReplayInputsh">trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enum-encoding-helpers-with-guarded-values.json-TestReplayInputs.h</a></li>
<li><a href="#trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateenumencodinghelpersjsonTestReplayInputscpp">trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enum-encoding-helpers.json-TestReplayInputs.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateenumencodinghelpersjsonTestReplayInputsh">trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enum-encoding-helpers.json-TestReplayInputs.h</a></li>
<li><a href="#trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateenumwithguardjsonTestReplayInputscpp">trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enum-with-guard.json-TestReplayInputs.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateenumwithguardjsonTestReplayInputsh">trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enum-with-guard.json-TestReplayInputs.h</a></li>
<li><a href="#trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateenumswithsamebasenamejsonTestReplayInputscpp">trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enums-with-same-base-name.json-TestReplayInputs.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateenumswithsamebasenamejsonTestReplayInputsh">trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enums-with-same-base-name.json-TestReplayInputs.h</a></li>
<li><a href="#trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateinputwithguardjsonTestReplayInputscpp">trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-input-with-guard.json-TestReplayInputs.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateinputwithguardjsonTestReplayInputsh">trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-input-with-guard.json-TestReplayInputs.h</a></li>
<li><a href="#trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateinputwithvectormembersjsonTestReplayInputscpp">trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-input-with-vector-members.json-TestReplayInputs.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateinputwithvectormembersjsonTestReplayInputsh">trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-input-with-vector-members.json-TestReplayInputs.h</a></li>
<li><a href="#trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateinputswithflagsjsonTestReplayInputscpp">trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-inputs-with-flags.json-TestReplayInputs.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateinputswithflagsjsonTestReplayInputsh">trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-inputs-with-flags.json-TestReplayInputs.h</a></li>
<li><a href="#trunkSourceJavaScriptCorereplayscriptstestsexpectedgeneratememoizedtypemodesjsonTestReplayInputscpp">trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-memoized-type-modes.json-TestReplayInputs.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorereplayscriptstestsexpectedgeneratememoizedtypemodesjsonTestReplayInputsh">trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-memoized-type-modes.json-TestReplayInputs.h</a></li>
<li><a href="#trunkSourceWebCoreCMakeListstxt">trunk/Source/WebCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCoreinspectorInspectorReplayAgentcpp">trunk/Source/WebCore/inspector/InspectorReplayAgent.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformThreadGlobalDatacpp">trunk/Source/WebCore/platform/ThreadGlobalData.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformThreadGlobalDatah">trunk/Source/WebCore/platform/ThreadGlobalData.h</a></li>
<li><a href="#trunkSourceWebCorereplayAllReplayInputsh">trunk/Source/WebCore/replay/AllReplayInputs.h</a></li>
<li><a href="#trunkSourceWebCorereplayEventLoopInputh">trunk/Source/WebCore/replay/EventLoopInput.h</a></li>
<li><a href="#trunkSourceWebCorereplayEventLoopInputDispatchercpp">trunk/Source/WebCore/replay/EventLoopInputDispatcher.cpp</a></li>
<li><a href="#trunkSourceWebCorereplayMemoizedDOMResultcpp">trunk/Source/WebCore/replay/MemoizedDOMResult.cpp</a></li>
<li><a href="#trunkSourceWebCorereplayMemoizedDOMResulth">trunk/Source/WebCore/replay/MemoizedDOMResult.h</a></li>
<li><a href="#trunkSourceWebCorereplayReplayingInputCursorcpp">trunk/Source/WebCore/replay/ReplayingInputCursor.cpp</a></li>
<li><a href="#trunkSourceWebCorereplaySegmentedInputStoragecpp">trunk/Source/WebCore/replay/SegmentedInputStorage.cpp</a></li>
<li><a href="#trunkSourceWebCorereplaySerializationMethodscpp">trunk/Source/WebCore/replay/SerializationMethods.cpp</a></li>
</ul>
<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceWebCorereplayReplayInputTypescpp">trunk/Source/WebCore/replay/ReplayInputTypes.cpp</a></li>
<li><a href="#trunkSourceWebCorereplayReplayInputTypesh">trunk/Source/WebCore/replay/ReplayInputTypes.h</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/JavaScriptCore/ChangeLog        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -1,3 +1,51 @@
</span><ins>+2014-09-30 Brian J. Burg <burg@cs.washington.edu>
+
+ Web Replay: use static Strings instead of AtomicStrings for replay input type tags
+ https://bugs.webkit.org/show_bug.cgi?id=137086
+
+ Reviewed by Joseph Pecoraro.
+
+ This pattern doesn't work when we want to define some inputs in WebKit2.
+ The ReplayInputTypes class was generated from WebCore inputs only. This
+ patch moves all input traits to use static local Strings as type tags.
+
+ * replay/scripts/CodeGeneratorReplayInputs.py: Remove configuration of how
+ type tags are generated, since all framework targets now generate the same code.
+
+ * replay/NondeterministicInput.h:
+ * replay/scripts/CodeGeneratorReplayInputs.py: Simplify and rebase test results.
+ (Generator.generate_input_trait_implementation):
+ * replay/scripts/CodeGeneratorReplayInputsTemplates.py: Simplify templates.
+
+ * replay/scripts/tests/expected/generate-enum-encoding-helpers-with-guarded-values.json-TestReplayInputs.cpp:
+ (JSC::InputTraits<Test::SavedMouseButton>::type):
+ * replay/scripts/tests/expected/generate-enum-encoding-helpers-with-guarded-values.json-TestReplayInputs.h:
+ * replay/scripts/tests/expected/generate-enum-encoding-helpers.json-TestReplayInputs.cpp:
+ (JSC::InputTraits<Test::SavedMouseButton>::type):
+ * replay/scripts/tests/expected/generate-enum-encoding-helpers.json-TestReplayInputs.h:
+ * replay/scripts/tests/expected/generate-enum-with-guard.json-TestReplayInputs.cpp:
+ (JSC::InputTraits<Test::HandleWheelEvent>::type):
+ * replay/scripts/tests/expected/generate-enum-with-guard.json-TestReplayInputs.h:
+ * replay/scripts/tests/expected/generate-enums-with-same-base-name.json-TestReplayInputs.cpp:
+ (JSC::InputTraits<Test::FormCombo>::type):
+ * replay/scripts/tests/expected/generate-enums-with-same-base-name.json-TestReplayInputs.h:
+ * replay/scripts/tests/expected/generate-input-with-guard.json-TestReplayInputs.cpp:
+ (JSC::InputTraits<Test::GetCurrentTime>::type):
+ (JSC::InputTraits<Test::SetRandomSeed>::type):
+ * replay/scripts/tests/expected/generate-input-with-guard.json-TestReplayInputs.h:
+ * replay/scripts/tests/expected/generate-input-with-vector-members.json-TestReplayInputs.cpp:
+ (JSC::InputTraits<Test::ArrayOfThings>::type):
+ (JSC::InputTraits<Test::SavedHistory>::type):
+ * replay/scripts/tests/expected/generate-input-with-vector-members.json-TestReplayInputs.h:
+ * replay/scripts/tests/expected/generate-inputs-with-flags.json-TestReplayInputs.cpp:
+ (JSC::InputTraits<Test::ScalarInput1>::type):
+ (JSC::InputTraits<Test::ScalarInput2>::type):
+ * replay/scripts/tests/expected/generate-inputs-with-flags.json-TestReplayInputs.h:
+ * replay/scripts/tests/expected/generate-memoized-type-modes.json-TestReplayInputs.cpp:
+ (JSC::InputTraits<Test::ScalarInput>::type):
+ (JSC::InputTraits<Test::MapInput>::type):
+ * replay/scripts/tests/expected/generate-memoized-type-modes.json-TestReplayInputs.h:
+
</ins><span class="cx"> 2014-09-30 Daniel Bates <dabates@apple.com>
</span><span class="cx">
</span><span class="cx"> REGRESSION (r172532): JSBase.h declares NSMapTable functions that are SPI
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorereplayNondeterministicInputh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/replay/NondeterministicInput.h (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/replay/NondeterministicInput.h        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/JavaScriptCore/replay/NondeterministicInput.h        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -47,7 +47,7 @@
</span><span class="cx"> template<typename InputType>
</span><span class="cx"> struct JS_EXPORT_PRIVATE InputTraits {
</span><span class="cx"> static InputQueue queue();
</span><del>- static AtomicString& type();
</del><ins>+ static String& type();
</ins><span class="cx">
</span><span class="cx"> static void encode(EncodedValue& encodedInput, InputType& decodedInput);
</span><span class="cx"> static bool decode(EncodedValue& encodedInput, std::unique_ptr<InputType>& decodedInput);
</span><span class="lines">@@ -59,13 +59,13 @@
</span><span class="cx"> NondeterministicInputBase() { }
</span><span class="cx"> virtual ~NondeterministicInputBase() { }
</span><span class="cx">
</span><del>- virtual const AtomicString& type() const = 0;
</del><ins>+ virtual const String& type() const = 0;
</ins><span class="cx"> virtual InputQueue queue() const = 0;
</span><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> template<typename InputType>
</span><span class="cx"> class NondeterministicInput : public NondeterministicInputBase {
</span><del>- virtual const AtomicString& type() const override
</del><ins>+ virtual const String& type() const override
</ins><span class="cx"> {
</span><span class="cx"> return InputTraits<InputType>::type();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorereplayscriptsCodeGeneratorReplayInputspy"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputs.py (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputs.py        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputs.py        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -72,20 +72,14 @@
</span><span class="cx">
</span><span class="cx"> "implIncludes": [
</span><span class="cx"> (["WebCore"],
</span><del>- ("WebCore", "replay/ReplayInputTypes.h")
- ),
- (["WebCore"],
</del><span class="cx"> ("WebCore", "replay/SerializationMethods.h")
</span><span class="cx"> ),
</span><span class="cx"> (["WebCore", "JavaScriptCore"],
</span><span class="cx"> ("JavaScriptCore", "inspector/InspectorValues.h")
</span><span class="cx"> ),
</span><del>- (["JavaScriptCore"],
</del><ins>+ (["WebCore", "JavaScriptCore"],
</ins><span class="cx"> ("WTF", "wtf/NeverDestroyed.h")
</span><span class="cx"> ),
</span><del>- (["JavaScriptCore"],
- ("WTF", "wtf/text/AtomicString.h")
- ),
</del><span class="cx">
</span><span class="cx"> # Testing fixtures.
</span><span class="cx"> (["Test"],
</span><span class="lines">@@ -111,18 +105,15 @@
</span><span class="cx"> "prefix": "JS",
</span><span class="cx"> "namespace": "JSC",
</span><span class="cx"> "exportMacro": "JS_EXPORT_PRIVATE",
</span><del>- "inputTypeTemplate": Templates.InputTypeFromStaticLocal,
</del><span class="cx"> },
</span><span class="cx"> "WebCore": {
</span><span class="cx"> "prefix": "Web",
</span><span class="cx"> "namespace": "WebCore",
</span><del>- "inputTypeTemplate": Templates.InputTypeFromThreadLocal,
</del><span class="cx"> },
</span><span class="cx"> # Used for bindings tests.
</span><span class="cx"> "Test": {
</span><span class="cx"> "prefix": "Test",
</span><span class="cx"> "namespace": "Test",
</span><del>- "inputTypeTemplate": Templates.InputTypeFromStaticLocal,
</del><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -874,7 +865,7 @@
</span><span class="cx"> def generate_input_trait_implementation(self, _input):
</span><span class="cx"> template_arguments = {
</span><span class="cx"> 'inputsNamespace': self.target_framework.setting('namespace'),
</span><del>- 'inputTypeImplementation': Template(self.setting('inputTypeTemplate')).substitute(None, inputName=_input.name),
</del><ins>+ 'inputNameStringLiteral': '"%s"' % _input.name,
</ins><span class="cx"> 'qualifiedInputName': self.qualified_input_name(_input),
</span><span class="cx"> 'constructorArguments': self.generate_constructor_arguments_list(_input),
</span><span class="cx"> 'constructorFormalsList': self.generate_constructor_formals_list(_input),
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorereplayscriptsCodeGeneratorReplayInputsTemplatespy"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputsTemplates.py (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputsTemplates.py        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputsTemplates.py        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -98,7 +98,7 @@
</span><span class="cx"> InputTraitsDeclaration = (
</span><span class="cx"> """template<> ${structOrClass} InputTraits<${qualifiedInputName}> {
</span><span class="cx"> static InputQueue queue() { return InputQueue::${queueType}; }
</span><del>- static const AtomicString& type();
</del><ins>+ static const String& type();
</ins><span class="cx">
</span><span class="cx"> static void encode(JSC::EncodedValue&, const ${qualifiedInputName}&);
</span><span class="cx"> static bool decode(JSC::EncodedValue&, std::unique_ptr<${qualifiedInputName}>&);
</span><span class="lines">@@ -152,9 +152,10 @@
</span><span class="cx"> """)
</span><span class="cx">
</span><span class="cx"> InputTraitsImplementation = (
</span><del>- """const AtomicString& InputTraits<${qualifiedInputName}>::type()
</del><ins>+ """const String& InputTraits<${qualifiedInputName}>::type()
</ins><span class="cx"> {
</span><del>-$inputTypeImplementation
</del><ins>+ static NeverDestroyed<const String> type(ASCIILiteral(${inputNameStringLiteral}));
+ return type;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void InputTraits<${qualifiedInputName}>::encode(EncodedValue& encodedValue, const ${qualifiedInputName}& input)
</span><span class="lines">@@ -226,12 +227,6 @@
</span><span class="cx"> """ if (enumString == "${enumStringValue}")
</span><span class="cx"> enumValue = static_cast<${qualifiedEnumName}>(enumValue | ${qualifiedEnumValue});""")
</span><span class="cx">
</span><del>- InputTypeFromStaticLocal = (
- """ static NeverDestroyed<const AtomicString> type("${inputName}", AtomicString::ConstructFromLiteral);
- return type;""")
-
- InputTypeFromThreadLocal = " return WebCore::inputTypes().${inputName};"
-
</del><span class="cx"> InputClassImplementation = (
</span><span class="cx"> """${inputName}::${inputName}(${constructorFormalsList})
</span><span class="cx"> ${initializerList}
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateenumencodinghelperswithguardedvaluesjsonTestReplayInputscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enum-encoding-helpers-with-guarded-values.json-TestReplayInputs.cpp (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enum-encoding-helpers-with-guarded-values.json-TestReplayInputs.cpp        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enum-encoding-helpers-with-guarded-values.json-TestReplayInputs.cpp        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -48,9 +48,9 @@
</span><span class="cx"> } // namespace Test
</span><span class="cx">
</span><span class="cx"> namespace JSC {
</span><del>-const AtomicString& InputTraits<Test::SavedMouseButton>::type()
</del><ins>+const String& InputTraits<Test::SavedMouseButton>::type()
</ins><span class="cx"> {
</span><del>- static NeverDestroyed<const AtomicString> type("SavedMouseButton", AtomicString::ConstructFromLiteral);
</del><ins>+ static NeverDestroyed<const String> type(ASCIILiteral("SavedMouseButton"));
</ins><span class="cx"> return type;
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateenumencodinghelperswithguardedvaluesjsonTestReplayInputsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enum-encoding-helpers-with-guarded-values.json-TestReplayInputs.h (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enum-encoding-helpers-with-guarded-values.json-TestReplayInputs.h        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enum-encoding-helpers-with-guarded-values.json-TestReplayInputs.h        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -46,7 +46,7 @@
</span><span class="cx"> namespace JSC {
</span><span class="cx"> template<> struct InputTraits<Test::SavedMouseButton> {
</span><span class="cx"> static InputQueue queue() { return InputQueue::ScriptMemoizedData; }
</span><del>- static const AtomicString& type();
</del><ins>+ static const String& type();
</ins><span class="cx">
</span><span class="cx"> static void encode(JSC::EncodedValue&, const Test::SavedMouseButton&);
</span><span class="cx"> static bool decode(JSC::EncodedValue&, std::unique_ptr<Test::SavedMouseButton>&);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateenumencodinghelpersjsonTestReplayInputscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enum-encoding-helpers.json-TestReplayInputs.cpp (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enum-encoding-helpers.json-TestReplayInputs.cpp        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enum-encoding-helpers.json-TestReplayInputs.cpp        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -49,9 +49,9 @@
</span><span class="cx"> } // namespace Test
</span><span class="cx">
</span><span class="cx"> namespace JSC {
</span><del>-const AtomicString& InputTraits<Test::SavedMouseButton>::type()
</del><ins>+const String& InputTraits<Test::SavedMouseButton>::type()
</ins><span class="cx"> {
</span><del>- static NeverDestroyed<const AtomicString> type("SavedMouseButton", AtomicString::ConstructFromLiteral);
</del><ins>+ static NeverDestroyed<const String> type(ASCIILiteral("SavedMouseButton"));
</ins><span class="cx"> return type;
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateenumencodinghelpersjsonTestReplayInputsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enum-encoding-helpers.json-TestReplayInputs.h (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enum-encoding-helpers.json-TestReplayInputs.h        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enum-encoding-helpers.json-TestReplayInputs.h        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -50,7 +50,7 @@
</span><span class="cx"> namespace JSC {
</span><span class="cx"> template<> struct InputTraits<Test::SavedMouseButton> {
</span><span class="cx"> static InputQueue queue() { return InputQueue::ScriptMemoizedData; }
</span><del>- static const AtomicString& type();
</del><ins>+ static const String& type();
</ins><span class="cx">
</span><span class="cx"> static void encode(JSC::EncodedValue&, const Test::SavedMouseButton&);
</span><span class="cx"> static bool decode(JSC::EncodedValue&, std::unique_ptr<Test::SavedMouseButton>&);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateenumwithguardjsonTestReplayInputscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enum-with-guard.json-TestReplayInputs.cpp (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enum-with-guard.json-TestReplayInputs.cpp        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enum-with-guard.json-TestReplayInputs.cpp        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -48,9 +48,9 @@
</span><span class="cx"> } // namespace Test
</span><span class="cx">
</span><span class="cx"> namespace JSC {
</span><del>-const AtomicString& InputTraits<Test::HandleWheelEvent>::type()
</del><ins>+const String& InputTraits<Test::HandleWheelEvent>::type()
</ins><span class="cx"> {
</span><del>- static NeverDestroyed<const AtomicString> type("HandleWheelEvent", AtomicString::ConstructFromLiteral);
</del><ins>+ static NeverDestroyed<const String> type(ASCIILiteral("HandleWheelEvent"));
</ins><span class="cx"> return type;
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateenumwithguardjsonTestReplayInputsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enum-with-guard.json-TestReplayInputs.h (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enum-with-guard.json-TestReplayInputs.h        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enum-with-guard.json-TestReplayInputs.h        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -47,7 +47,7 @@
</span><span class="cx"> namespace JSC {
</span><span class="cx"> template<> struct InputTraits<Test::HandleWheelEvent> {
</span><span class="cx"> static InputQueue queue() { return InputQueue::EventLoopInput; }
</span><del>- static const AtomicString& type();
</del><ins>+ static const String& type();
</ins><span class="cx">
</span><span class="cx"> static void encode(JSC::EncodedValue&, const Test::HandleWheelEvent&);
</span><span class="cx"> static bool decode(JSC::EncodedValue&, std::unique_ptr<Test::HandleWheelEvent>&);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateenumswithsamebasenamejsonTestReplayInputscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enums-with-same-base-name.json-TestReplayInputs.cpp (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enums-with-same-base-name.json-TestReplayInputs.cpp        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enums-with-same-base-name.json-TestReplayInputs.cpp        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -50,9 +50,9 @@
</span><span class="cx"> } // namespace Test
</span><span class="cx">
</span><span class="cx"> namespace JSC {
</span><del>-const AtomicString& InputTraits<Test::FormCombo>::type()
</del><ins>+const String& InputTraits<Test::FormCombo>::type()
</ins><span class="cx"> {
</span><del>- static NeverDestroyed<const AtomicString> type("FormCombo", AtomicString::ConstructFromLiteral);
</del><ins>+ static NeverDestroyed<const String> type(ASCIILiteral("FormCombo"));
</ins><span class="cx"> return type;
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateenumswithsamebasenamejsonTestReplayInputsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enums-with-same-base-name.json-TestReplayInputs.h (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enums-with-same-base-name.json-TestReplayInputs.h        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-enums-with-same-base-name.json-TestReplayInputs.h        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -46,7 +46,7 @@
</span><span class="cx"> namespace JSC {
</span><span class="cx"> template<> struct InputTraits<Test::FormCombo> {
</span><span class="cx"> static InputQueue queue() { return InputQueue::ScriptMemoizedData; }
</span><del>- static const AtomicString& type();
</del><ins>+ static const String& type();
</ins><span class="cx">
</span><span class="cx"> static void encode(JSC::EncodedValue&, const Test::FormCombo&);
</span><span class="cx"> static bool decode(JSC::EncodedValue&, std::unique_ptr<Test::FormCombo>&);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateinputwithguardjsonTestReplayInputscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-input-with-guard.json-TestReplayInputs.cpp (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-input-with-guard.json-TestReplayInputs.cpp        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-input-with-guard.json-TestReplayInputs.cpp        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -60,9 +60,9 @@
</span><span class="cx">
</span><span class="cx"> namespace JSC {
</span><span class="cx"> #if ENABLE(DUMMY_FEATURE)
</span><del>-const AtomicString& InputTraits<Test::GetCurrentTime>::type()
</del><ins>+const String& InputTraits<Test::GetCurrentTime>::type()
</ins><span class="cx"> {
</span><del>- static NeverDestroyed<const AtomicString> type("GetCurrentTime", AtomicString::ConstructFromLiteral);
</del><ins>+ static NeverDestroyed<const String> type(ASCIILiteral("GetCurrentTime"));
</ins><span class="cx"> return type;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -82,9 +82,9 @@
</span><span class="cx"> }
</span><span class="cx"> #endif // ENABLE(DUMMY_FEATURE)
</span><span class="cx">
</span><del>-const AtomicString& InputTraits<Test::SetRandomSeed>::type()
</del><ins>+const String& InputTraits<Test::SetRandomSeed>::type()
</ins><span class="cx"> {
</span><del>- static NeverDestroyed<const AtomicString> type("SetRandomSeed", AtomicString::ConstructFromLiteral);
</del><ins>+ static NeverDestroyed<const String> type(ASCIILiteral("SetRandomSeed"));
</ins><span class="cx"> return type;
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateinputwithguardjsonTestReplayInputsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-input-with-guard.json-TestReplayInputs.h (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-input-with-guard.json-TestReplayInputs.h        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-input-with-guard.json-TestReplayInputs.h        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -47,7 +47,7 @@
</span><span class="cx"> #if ENABLE(DUMMY_FEATURE)
</span><span class="cx"> template<> struct InputTraits<Test::GetCurrentTime> {
</span><span class="cx"> static InputQueue queue() { return InputQueue::ScriptMemoizedData; }
</span><del>- static const AtomicString& type();
</del><ins>+ static const String& type();
</ins><span class="cx">
</span><span class="cx"> static void encode(JSC::EncodedValue&, const Test::GetCurrentTime&);
</span><span class="cx"> static bool decode(JSC::EncodedValue&, std::unique_ptr<Test::GetCurrentTime>&);
</span><span class="lines">@@ -56,7 +56,7 @@
</span><span class="cx">
</span><span class="cx"> template<> struct InputTraits<Test::SetRandomSeed> {
</span><span class="cx"> static InputQueue queue() { return InputQueue::ScriptMemoizedData; }
</span><del>- static const AtomicString& type();
</del><ins>+ static const String& type();
</ins><span class="cx">
</span><span class="cx"> static void encode(JSC::EncodedValue&, const Test::SetRandomSeed&);
</span><span class="cx"> static bool decode(JSC::EncodedValue&, std::unique_ptr<Test::SetRandomSeed>&);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateinputwithvectormembersjsonTestReplayInputscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-input-with-vector-members.json-TestReplayInputs.cpp (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-input-with-vector-members.json-TestReplayInputs.cpp        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-input-with-vector-members.json-TestReplayInputs.cpp        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -61,9 +61,9 @@
</span><span class="cx"> } // namespace Test
</span><span class="cx">
</span><span class="cx"> namespace JSC {
</span><del>-const AtomicString& InputTraits<Test::ArrayOfThings>::type()
</del><ins>+const String& InputTraits<Test::ArrayOfThings>::type()
</ins><span class="cx"> {
</span><del>- static NeverDestroyed<const AtomicString> type("ArrayOfThings", AtomicString::ConstructFromLiteral);
</del><ins>+ static NeverDestroyed<const String> type(ASCIILiteral("ArrayOfThings"));
</ins><span class="cx"> return type;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -92,9 +92,9 @@
</span><span class="cx"> return true;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-const AtomicString& InputTraits<Test::SavedHistory>::type()
</del><ins>+const String& InputTraits<Test::SavedHistory>::type()
</ins><span class="cx"> {
</span><del>- static NeverDestroyed<const AtomicString> type("SavedHistory", AtomicString::ConstructFromLiteral);
</del><ins>+ static NeverDestroyed<const String> type(ASCIILiteral("SavedHistory"));
</ins><span class="cx"> return type;
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateinputwithvectormembersjsonTestReplayInputsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-input-with-vector-members.json-TestReplayInputs.h (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-input-with-vector-members.json-TestReplayInputs.h        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-input-with-vector-members.json-TestReplayInputs.h        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx"> namespace JSC {
</span><span class="cx"> template<> struct InputTraits<Test::ArrayOfThings> {
</span><span class="cx"> static InputQueue queue() { return InputQueue::ScriptMemoizedData; }
</span><del>- static const AtomicString& type();
</del><ins>+ static const String& type();
</ins><span class="cx">
</span><span class="cx"> static void encode(JSC::EncodedValue&, const Test::ArrayOfThings&);
</span><span class="cx"> static bool decode(JSC::EncodedValue&, std::unique_ptr<Test::ArrayOfThings>&);
</span><span class="lines">@@ -56,7 +56,7 @@
</span><span class="cx">
</span><span class="cx"> template<> struct InputTraits<Test::SavedHistory> {
</span><span class="cx"> static InputQueue queue() { return InputQueue::ScriptMemoizedData; }
</span><del>- static const AtomicString& type();
</del><ins>+ static const String& type();
</ins><span class="cx">
</span><span class="cx"> static void encode(JSC::EncodedValue&, const Test::SavedHistory&);
</span><span class="cx"> static bool decode(JSC::EncodedValue&, std::unique_ptr<Test::SavedHistory>&);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateinputswithflagsjsonTestReplayInputscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-inputs-with-flags.json-TestReplayInputs.cpp (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-inputs-with-flags.json-TestReplayInputs.cpp        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-inputs-with-flags.json-TestReplayInputs.cpp        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -57,9 +57,9 @@
</span><span class="cx"> } // namespace Test
</span><span class="cx">
</span><span class="cx"> namespace JSC {
</span><del>-const AtomicString& InputTraits<Test::ScalarInput1>::type()
</del><ins>+const String& InputTraits<Test::ScalarInput1>::type()
</ins><span class="cx"> {
</span><del>- static NeverDestroyed<const AtomicString> type("ScalarInput1", AtomicString::ConstructFromLiteral);
</del><ins>+ static NeverDestroyed<const String> type(ASCIILiteral("ScalarInput1"));
</ins><span class="cx"> return type;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -78,9 +78,9 @@
</span><span class="cx"> return true;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-const AtomicString& InputTraits<Test::ScalarInput2>::type()
</del><ins>+const String& InputTraits<Test::ScalarInput2>::type()
</ins><span class="cx"> {
</span><del>- static NeverDestroyed<const AtomicString> type("ScalarInput2", AtomicString::ConstructFromLiteral);
</del><ins>+ static NeverDestroyed<const String> type(ASCIILiteral("ScalarInput2"));
</ins><span class="cx"> return type;
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorereplayscriptstestsexpectedgenerateinputswithflagsjsonTestReplayInputsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-inputs-with-flags.json-TestReplayInputs.h (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-inputs-with-flags.json-TestReplayInputs.h        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-inputs-with-flags.json-TestReplayInputs.h        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -44,7 +44,7 @@
</span><span class="cx"> namespace JSC {
</span><span class="cx"> template<> struct InputTraits<Test::ScalarInput1> {
</span><span class="cx"> static InputQueue queue() { return InputQueue::ScriptMemoizedData; }
</span><del>- static const AtomicString& type();
</del><ins>+ static const String& type();
</ins><span class="cx">
</span><span class="cx"> static void encode(JSC::EncodedValue&, const Test::ScalarInput1&);
</span><span class="cx"> static bool decode(JSC::EncodedValue&, std::unique_ptr<Test::ScalarInput1>&);
</span><span class="lines">@@ -52,7 +52,7 @@
</span><span class="cx">
</span><span class="cx"> template<> struct InputTraits<Test::ScalarInput2> {
</span><span class="cx"> static InputQueue queue() { return InputQueue::ScriptMemoizedData; }
</span><del>- static const AtomicString& type();
</del><ins>+ static const String& type();
</ins><span class="cx">
</span><span class="cx"> static void encode(JSC::EncodedValue&, const Test::ScalarInput2&);
</span><span class="cx"> static bool decode(JSC::EncodedValue&, std::unique_ptr<Test::ScalarInput2>&);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorereplayscriptstestsexpectedgeneratememoizedtypemodesjsonTestReplayInputscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-memoized-type-modes.json-TestReplayInputs.cpp (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-memoized-type-modes.json-TestReplayInputs.cpp        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-memoized-type-modes.json-TestReplayInputs.cpp        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -57,9 +57,9 @@
</span><span class="cx"> } // namespace Test
</span><span class="cx">
</span><span class="cx"> namespace JSC {
</span><del>-const AtomicString& InputTraits<Test::ScalarInput>::type()
</del><ins>+const String& InputTraits<Test::ScalarInput>::type()
</ins><span class="cx"> {
</span><del>- static NeverDestroyed<const AtomicString> type("ScalarInput", AtomicString::ConstructFromLiteral);
</del><ins>+ static NeverDestroyed<const String> type(ASCIILiteral("ScalarInput"));
</ins><span class="cx"> return type;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -78,9 +78,9 @@
</span><span class="cx"> return true;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-const AtomicString& InputTraits<Test::MapInput>::type()
</del><ins>+const String& InputTraits<Test::MapInput>::type()
</ins><span class="cx"> {
</span><del>- static NeverDestroyed<const AtomicString> type("MapInput", AtomicString::ConstructFromLiteral);
</del><ins>+ static NeverDestroyed<const String> type(ASCIILiteral("MapInput"));
</ins><span class="cx"> return type;
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorereplayscriptstestsexpectedgeneratememoizedtypemodesjsonTestReplayInputsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-memoized-type-modes.json-TestReplayInputs.h (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-memoized-type-modes.json-TestReplayInputs.h        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/JavaScriptCore/replay/scripts/tests/expected/generate-memoized-type-modes.json-TestReplayInputs.h        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -44,7 +44,7 @@
</span><span class="cx"> namespace JSC {
</span><span class="cx"> template<> struct InputTraits<Test::ScalarInput> {
</span><span class="cx"> static InputQueue queue() { return InputQueue::ScriptMemoizedData; }
</span><del>- static const AtomicString& type();
</del><ins>+ static const String& type();
</ins><span class="cx">
</span><span class="cx"> static void encode(JSC::EncodedValue&, const Test::ScalarInput&);
</span><span class="cx"> static bool decode(JSC::EncodedValue&, std::unique_ptr<Test::ScalarInput>&);
</span><span class="lines">@@ -52,7 +52,7 @@
</span><span class="cx">
</span><span class="cx"> template<> struct InputTraits<Test::MapInput> {
</span><span class="cx"> static InputQueue queue() { return InputQueue::ScriptMemoizedData; }
</span><del>- static const AtomicString& type();
</del><ins>+ static const String& type();
</ins><span class="cx">
</span><span class="cx"> static void encode(JSC::EncodedValue&, const Test::MapInput&);
</span><span class="cx"> static bool decode(JSC::EncodedValue&, std::unique_ptr<Test::MapInput>&);
</span></span></pre></div>
<a id="trunkSourceWebCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/CMakeLists.txt (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/CMakeLists.txt        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/WebCore/CMakeLists.txt        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -3129,7 +3129,6 @@
</span><span class="cx"> replay/ReplayingInputCursor.cpp
</span><span class="cx"> replay/ReplayInputCreationMethods.cpp
</span><span class="cx"> replay/ReplayInputDispatchMethods.cpp
</span><del>- replay/ReplayInputTypes.cpp
</del><span class="cx"> replay/ReplaySession.cpp
</span><span class="cx"> replay/ReplaySessionSegment.cpp
</span><span class="cx"> replay/SegmentedInputStorage.cpp
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/WebCore/ChangeLog        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -1,3 +1,47 @@
</span><ins>+2014-09-30 Brian J. Burg <burg@cs.washington.edu>
+
+ Web Replay: use static Strings instead of AtomicStrings for replay input type tags
+ https://bugs.webkit.org/show_bug.cgi?id=137086
+
+ Reviewed by Joseph Pecoraro.
+
+ This pattern doesn't work when we want to define some inputs in WebKit2,
+ since the ReplayInputTypes class is generated from WebCore inputs only.
+
+ Replace tag-checking uses of ReplayInputTypes with InputTraits<T>::type().
+ Remove thread-local input types, and switch to using a plain const String instead
+ of const AtomicString.
+
+ No new tests, no behavior changed.
+
+ * CMakeLists.txt:
+ * WebCore.xcodeproj/project.pbxproj:
+ * inspector/InspectorReplayAgent.cpp:
+ (WebCore::SerializeInputToJSONFunctor::operator()):
+ * platform/ThreadGlobalData.cpp:
+ (WebCore::ThreadGlobalData::ThreadGlobalData):
+ (WebCore::ThreadGlobalData::destroy):
+ * platform/ThreadGlobalData.h:
+ (WebCore::ThreadGlobalData::inputTypes): Deleted.
+ * replay/AllReplayInputs.h:
+ * replay/EventLoopInput.h:
+ * replay/EventLoopInputDispatcher.cpp:
+ (WebCore::EventLoopInputDispatcher::dispatchInput):
+ * replay/MemoizedDOMResult.cpp:
+ (WebCore::MemoizedDOMResultBase::type):
+ (JSC::InputTraits<MemoizedDOMResultBase>::type):
+ * replay/MemoizedDOMResult.h:
+ * replay/ReplayInputTypes.cpp: Removed.
+ * replay/ReplayInputTypes.h: Removed.
+ * replay/ReplayingInputCursor.cpp:
+ (WebCore::ReplayingInputCursor::loadInput):
+ * replay/SegmentedInputStorage.cpp:
+ (WebCore::SegmentedInputStorage::load):
+ (WebCore::SegmentedInputStorage::store):
+ * replay/SerializationMethods.cpp:
+ (JSC::EncodingTraits<NondeterministicInputBase>::encodeValue):
+ (JSC::EncodingTraits<NondeterministicInputBase>::decodeValue):
+
</ins><span class="cx"> 2014-09-30 Eric Carlson <eric.carlson@apple.com>
</span><span class="cx">
</span><span class="cx"> [Mac] MediaPlayerPrivateQTKit should not use FrameView
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -3597,8 +3597,6 @@
</span><span class="cx">                 98CE4326129E00BD005821DC /* LinkLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 98CE4325129E00BD005821DC /* LinkLoader.cpp */; };
</span><span class="cx">                 98CE432A129E00E5005821DC /* LinkLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 98CE4329129E00E5005821DC /* LinkLoader.h */; };
</span><span class="cx">                 98EB1F951313FE0500D0E1EA /* NotImplemented.h in Headers */ = {isa = PBXBuildFile; fileRef = 98EB1F941313FE0500D0E1EA /* NotImplemented.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><del>-                990A1A0418ADA48400183FD1 /* ReplayInputTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 990A19F418ADA48400183FD1 /* ReplayInputTypes.cpp */; };
-                990A1A0518ADA48400183FD1 /* ReplayInputTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 990A19F518ADA48400183FD1 /* ReplayInputTypes.h */; };
</del><span class="cx">                 9920398218B95BC600B39AF9 /* UserInputBridge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9920398018B95BC600B39AF9 /* UserInputBridge.cpp */; };
</span><span class="cx">                 9920398318B95BC600B39AF9 /* UserInputBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 9920398118B95BC600B39AF9 /* UserInputBridge.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 996231F318D18AC300C03FDA /* InspectorWebBackendCommands.js in Headers */ = {isa = PBXBuildFile; fileRef = 996231F118D189BD00C03FDA /* InspectorWebBackendCommands.js */; };
</span><span class="lines">@@ -10756,8 +10754,6 @@
</span><span class="cx">                 98CE4325129E00BD005821DC /* LinkLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LinkLoader.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 98CE4329129E00E5005821DC /* LinkLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinkLoader.h; sourceTree = "<group>"; };
</span><span class="cx">                 98EB1F941313FE0500D0E1EA /* NotImplemented.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NotImplemented.h; sourceTree = "<group>"; };
</span><del>-                990A19F418ADA48400183FD1 /* ReplayInputTypes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ReplayInputTypes.cpp; sourceTree = "<group>"; };
-                990A19F518ADA48400183FD1 /* ReplayInputTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReplayInputTypes.h; sourceTree = "<group>"; };
</del><span class="cx">                 9920398018B95BC600B39AF9 /* UserInputBridge.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserInputBridge.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 9920398118B95BC600B39AF9 /* UserInputBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserInputBridge.h; sourceTree = "<group>"; };
</span><span class="cx">                 996231F118D189BD00C03FDA /* InspectorWebBackendCommands.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = InspectorWebBackendCommands.js; sourceTree = "<group>"; };
</span><span class="lines">@@ -18361,8 +18357,6 @@
</span><span class="cx">                                 99CC0B4118BE9849006CEBCC /* ReplayingInputCursor.h */,
</span><span class="cx">                                 99CC0B4218BE9849006CEBCC /* ReplayInputCreationMethods.cpp */,
</span><span class="cx">                                 99CC0B4318BE9849006CEBCC /* ReplayInputDispatchMethods.cpp */,
</span><del>-                                990A19F418ADA48400183FD1 /* ReplayInputTypes.cpp */,
-                                990A19F518ADA48400183FD1 /* ReplayInputTypes.h */,
</del><span class="cx">                                 99CC0B4418BE9849006CEBCC /* ReplaySession.cpp */,
</span><span class="cx">                                 99CC0B4518BE9849006CEBCC /* ReplaySession.h */,
</span><span class="cx">                                 99CC0B4618BE9849006CEBCC /* ReplaySessionSegment.cpp */,
</span><span class="lines">@@ -25717,7 +25711,6 @@
</span><span class="cx">                                 93309E0A099E64920056E581 /* ReplaceSelectionCommand.h in Headers */,
</span><span class="cx">                                 99CC0B5418BE9849006CEBCC /* ReplayController.h in Headers */,
</span><span class="cx">                                 99CC0B5618BE984A006CEBCC /* ReplayingInputCursor.h in Headers */,
</span><del>-                                990A1A0518ADA48400183FD1 /* ReplayInputTypes.h in Headers */,
</del><span class="cx">                                 99CC0B5A18BE984A006CEBCC /* ReplaySession.h in Headers */,
</span><span class="cx">                                 99CC0B5C18BE984A006CEBCC /* ReplaySessionSegment.h in Headers */,
</span><span class="cx">                                 4998AEC613F9D0EA0090B1AA /* RequestAnimationFrameCallback.h in Headers */,
</span><span class="lines">@@ -29169,7 +29162,6 @@
</span><span class="cx">                                 99CC0B5518BE9849006CEBCC /* ReplayingInputCursor.cpp in Sources */,
</span><span class="cx">                                 99CC0B5718BE984A006CEBCC /* ReplayInputCreationMethods.cpp in Sources */,
</span><span class="cx">                                 99CC0B5818BE984A006CEBCC /* ReplayInputDispatchMethods.cpp in Sources */,
</span><del>-                                990A1A0418ADA48400183FD1 /* ReplayInputTypes.cpp in Sources */,
</del><span class="cx">                                 99CC0B5918BE984A006CEBCC /* ReplaySession.cpp in Sources */,
</span><span class="cx">                                 99CC0B5B18BE984A006CEBCC /* ReplaySessionSegment.cpp in Sources */,
</span><span class="cx">                                 F55B3DCF1251F12D003EF269 /* ResetInputType.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorInspectorReplayAgentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/InspectorReplayAgent.cpp (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/InspectorReplayAgent.cpp        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/WebCore/inspector/InspectorReplayAgent.cpp        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -119,7 +119,7 @@
</span><span class="cx">
</span><span class="cx"> void operator()(size_t index, const NondeterministicInputBase* input)
</span><span class="cx"> {
</span><del>- LOG(WebReplay, "%-25s Writing %5zu: %s\n", "[SerializeInput]", index, input->type().string().ascii().data());
</del><ins>+ LOG(WebReplay, "%-25s Writing %5zu: %s\n", "[SerializeInput]", index, input->type().ascii().data());
</ins><span class="cx">
</span><span class="cx"> if (RefPtr<Inspector::Protocol::Replay::ReplayInput> serializedInput = buildInspectorObjectForInput(*input, index))
</span><span class="cx"> m_inputs->addItem(serializedInput.release());
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformThreadGlobalDatacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ThreadGlobalData.cpp (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ThreadGlobalData.cpp        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/WebCore/platform/ThreadGlobalData.cpp        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -41,10 +41,6 @@
</span><span class="cx"> #include "TextCodeCMac.h"
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>-#if ENABLE(WEB_REPLAY)
-#include "ReplayInputTypes.h"
-#endif
-
</del><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> ThreadSpecific<ThreadGlobalData>* ThreadGlobalData::staticData;
</span><span class="lines">@@ -56,9 +52,6 @@
</span><span class="cx"> : m_cachedResourceRequestInitiators(adoptPtr(new CachedResourceRequestInitiators))
</span><span class="cx"> , m_eventNames(adoptPtr(new EventNames))
</span><span class="cx"> , m_threadTimers(adoptPtr(new ThreadTimers))
</span><del>-#if ENABLE(WEB_REPLAY)
- , m_inputTypes(std::make_unique<ReplayInputTypes>())
-#endif
</del><span class="cx"> #ifndef NDEBUG
</span><span class="cx"> , m_isMainThread(isMainThread())
</span><span class="cx"> #endif
</span><span class="lines">@@ -87,10 +80,6 @@
</span><span class="cx">
</span><span class="cx"> m_cachedConverterICU.clear();
</span><span class="cx">
</span><del>-#if ENABLE(WEB_REPLAY)
- m_inputTypes = nullptr;
-#endif
-
</del><span class="cx"> m_eventNames.clear();
</span><span class="cx"> m_threadTimers.clear();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformThreadGlobalDatah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ThreadGlobalData.h (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ThreadGlobalData.h        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/WebCore/platform/ThreadGlobalData.h        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -40,7 +40,6 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> class EventNames;
</span><del>- class ReplayInputTypes;
</del><span class="cx"> class ThreadTimers;
</span><span class="cx">
</span><span class="cx"> struct CachedResourceRequestInitiators;
</span><span class="lines">@@ -57,9 +56,6 @@
</span><span class="cx"> const CachedResourceRequestInitiators& cachedResourceRequestInitiators() { return *m_cachedResourceRequestInitiators; }
</span><span class="cx"> EventNames& eventNames() { return *m_eventNames; }
</span><span class="cx"> ThreadTimers& threadTimers() { return *m_threadTimers; }
</span><del>-#if ENABLE(WEB_REPLAY)
- ReplayInputTypes& inputTypes() { return *m_inputTypes; }
-#endif
</del><span class="cx">
</span><span class="cx"> ICUConverterWrapper& cachedConverterICU() { return *m_cachedConverterICU; }
</span><span class="cx">
</span><span class="lines">@@ -76,10 +72,6 @@
</span><span class="cx"> OwnPtr<EventNames> m_eventNames;
</span><span class="cx"> OwnPtr<ThreadTimers> m_threadTimers;
</span><span class="cx">
</span><del>-#if ENABLE(WEB_REPLAY)
- std::unique_ptr<ReplayInputTypes> m_inputTypes;
-#endif
-
</del><span class="cx"> #ifndef NDEBUG
</span><span class="cx"> bool m_isMainThread;
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCorereplayAllReplayInputsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/replay/AllReplayInputs.h (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/replay/AllReplayInputs.h        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/WebCore/replay/AllReplayInputs.h        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -29,8 +29,6 @@
</span><span class="cx"> // Note that there is not an exact correspondence between the two, since
</span><span class="cx"> // Some input types reside in the same file.
</span><span class="cx">
</span><del>-// Make sure that this stays in sync with ReplayInputTypes.h for custom inputs.
-
</del><span class="cx"> #ifndef AllReplayInputs_h
</span><span class="cx"> #define AllReplayInputs_h
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorereplayEventLoopInputh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/replay/EventLoopInput.h (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/replay/EventLoopInput.h        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/WebCore/replay/EventLoopInput.h        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -64,7 +64,7 @@
</span><span class="cx">
</span><span class="cx"> template <typename InputType>
</span><span class="cx"> class EventLoopInput : public EventLoopInputBase {
</span><del>- virtual const AtomicString& type() const override final
</del><ins>+ virtual const String& type() const override final
</ins><span class="cx"> {
</span><span class="cx"> return InputTraits<InputType>::type();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorereplayEventLoopInputDispatchercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/replay/EventLoopInputDispatcher.cpp (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/replay/EventLoopInputDispatcher.cpp        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/WebCore/replay/EventLoopInputDispatcher.cpp        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -31,8 +31,8 @@
</span><span class="cx"> #if ENABLE(WEB_REPLAY)
</span><span class="cx">
</span><span class="cx"> #include "Page.h"
</span><del>-#include "ReplayInputTypes.h"
</del><span class="cx"> #include "ReplayingInputCursor.h"
</span><ins>+#include "WebReplayInputs.h"
</ins><span class="cx"> #include <wtf/TemporaryChange.h>
</span><span class="cx">
</span><span class="cx"> #if !LOG_DISABLED
</span><span class="lines">@@ -140,7 +140,7 @@
</span><span class="cx"> String jsonString = encodedInput.asObject()->toJSONString();
</span><span class="cx">
</span><span class="cx"> LOG(WebReplay, "%-20s ----------------------------------------------", "ReplayEvents");
</span><del>- LOG(WebReplay, "%-20s >DISPATCH: %s %s\n", "ReplayEvents", m_currentWork.input->type().string().utf8().data(), jsonString.utf8().data());
</del><ins>+ LOG(WebReplay, "%-20s >DISPATCH: %s %s\n", "ReplayEvents", m_currentWork.input->type().utf8().data(), jsonString.utf8().data());
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> m_client->willDispatchInput(*m_currentWork.input);
</span><span class="lines">@@ -158,7 +158,7 @@
</span><span class="cx">
</span><span class="cx"> // Notify clients that the event was dispatched.
</span><span class="cx"> m_client->didDispatchInput(*dispatchedInput);
</span><del>- if (dispatchedInput->type() == inputTypes().EndSegmentSentinel) {
</del><ins>+ if (dispatchedInput->type() == InputTraits<EndSegmentSentinel>::type()) {
</ins><span class="cx"> m_running = false;
</span><span class="cx"> m_dispatching = false;
</span><span class="cx"> m_client->didDispatchFinalInput();
</span></span></pre></div>
<a id="trunkSourceWebCorereplayMemoizedDOMResultcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/replay/MemoizedDOMResult.cpp (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/replay/MemoizedDOMResult.cpp        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/WebCore/replay/MemoizedDOMResult.cpp        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -29,15 +29,15 @@
</span><span class="cx">
</span><span class="cx"> #if ENABLE(WEB_REPLAY)
</span><span class="cx">
</span><del>-#include "ReplayInputTypes.h"
</del><span class="cx"> #include "SerializationMethods.h"
</span><span class="cx"> #include "WebReplayInputs.h"
</span><ins>+#include <wtf/NeverDestroyed.h>
</ins><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>-const AtomicString& MemoizedDOMResultBase::type() const
</del><ins>+const String& MemoizedDOMResultBase::type() const
</ins><span class="cx"> {
</span><del>- return inputTypes().MemoizedDOMResult;
</del><ins>+ return InputTraits<MemoizedDOMResultBase>::type();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> std::unique_ptr<MemoizedDOMResultBase> MemoizedDOMResultBase::createFromEncodedResult(const String& attribute, EncodedCType ctype, EncodedValue encodedValue, ExceptionCode exceptionCode)
</span><span class="lines">@@ -69,9 +69,10 @@
</span><span class="cx"> using WebCore::MemoizedDOMResult;
</span><span class="cx"> using WebCore::SerializedScriptValue;
</span><span class="cx">
</span><del>-const AtomicString& InputTraits<MemoizedDOMResultBase>::type()
</del><ins>+const String& InputTraits<MemoizedDOMResultBase>::type()
</ins><span class="cx"> {
</span><del>- return WebCore::inputTypes().MemoizedDOMResult;
</del><ins>+ static NeverDestroyed<const String> type(ASCIILiteral("MemoizedDOMResult"));
+ return type;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void InputTraits<MemoizedDOMResultBase>::encode(EncodedValue& encodedValue, const MemoizedDOMResultBase& input)
</span></span></pre></div>
<a id="trunkSourceWebCorereplayMemoizedDOMResulth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/replay/MemoizedDOMResult.h (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/replay/MemoizedDOMResult.h        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/WebCore/replay/MemoizedDOMResult.h        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -76,7 +76,7 @@
</span><span class="cx">
</span><span class="cx"> virtual EncodedValue encodedResult() const = 0;
</span><span class="cx"> virtual InputQueue queue() const final override { return InputQueue::ScriptMemoizedData; }
</span><del>- virtual const AtomicString& type() const final override;
</del><ins>+ virtual const String& type() const final override;
</ins><span class="cx">
</span><span class="cx"> const String& attribute() const { return m_attribute; }
</span><span class="cx"> EncodedCType ctype() const { return m_ctype; }
</span><span class="lines">@@ -146,7 +146,7 @@
</span><span class="cx"> template<>
</span><span class="cx"> struct InputTraits<MemoizedDOMResultBase> {
</span><span class="cx"> static InputQueue queue() { return InputQueue::ScriptMemoizedData; }
</span><del>- static const AtomicString& type();
</del><ins>+ static const String& type();
</ins><span class="cx">
</span><span class="cx"> static void encode(EncodedValue&, const MemoizedDOMResultBase& input);
</span><span class="cx"> static bool decode(EncodedValue&, std::unique_ptr<MemoizedDOMResultBase>& input);
</span></span></pre></div>
<a id="trunkSourceWebCorereplayReplayInputTypescpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/replay/ReplayInputTypes.cpp (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/replay/ReplayInputTypes.cpp        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/WebCore/replay/ReplayInputTypes.cpp        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -1,49 +0,0 @@
</span><del>-/*
- * Copyright (C) 2013 University of Washington. All rights reserved.
- * Copyright (C) 2014 Apple Inc. All rights resernved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "ReplayInputTypes.h"
-
-#if ENABLE(WEB_REPLAY)
-
-namespace WebCore {
-
-#define INITIALIZE_INPUT_TYPE(name) \
- , name(#name, AtomicString::ConstructFromLiteral)
-
-ReplayInputTypes::ReplayInputTypes()
- : dummy(0)
-JS_REPLAY_INPUT_NAMES_FOR_EACH(INITIALIZE_INPUT_TYPE)
-WEB_REPLAY_INPUT_NAMES_FOR_EACH(INITIALIZE_INPUT_TYPE)
-INITIALIZE_INPUT_TYPE(MemoizedDOMResult)
-{
- UNUSED_PARAM(dummy);
-}
-
-} // namespace WebCore
-
-#endif // ENABLE(WEB_REPLAY)
</del></span></pre></div>
<a id="trunkSourceWebCorereplayReplayInputTypesh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/replay/ReplayInputTypes.h (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/replay/ReplayInputTypes.h        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/WebCore/replay/ReplayInputTypes.h        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -1,62 +0,0 @@
</span><del>-/*
- * Copyright (C) 2013 University of Washington. All rights reserved.
- * Copyright (C) 2014 Apple Inc. All rights resernved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef ReplayInputTypes_h
-#define ReplayInputTypes_h
-
-#if ENABLE(WEB_REPLAY)
-
-#include "ThreadGlobalData.h"
-#include "WebReplayInputs.h"
-#include <JavaScriptCore/JSReplayInputs.h>
-#include <wtf/text/AtomicString.h>
-
-namespace WebCore {
-
-class ReplayInputTypes {
- WTF_MAKE_NONCOPYABLE(ReplayInputTypes); WTF_MAKE_FAST_ALLOCATED;
- int dummy; // Needed to make initialization macro work.
-public:
- ReplayInputTypes();
-
-#define DECLARE_REPLAY_INPUT_TYPES(name) AtomicString name;
- JS_REPLAY_INPUT_NAMES_FOR_EACH(DECLARE_REPLAY_INPUT_TYPES)
- WEB_REPLAY_INPUT_NAMES_FOR_EACH(DECLARE_REPLAY_INPUT_TYPES)
- DECLARE_REPLAY_INPUT_TYPES(MemoizedDOMResult);
-#undef DECLARE_REPLAY_INPUT_TYPES
-};
-
-inline ReplayInputTypes& inputTypes()
-{
- return threadGlobalData().inputTypes();
-}
-
-} // namespace WebCore
-
-#endif // ENABLE(WEB_REPLAY)
-
-#endif // ReplayInputTypes_h
</del></span></pre></div>
<a id="trunkSourceWebCorereplayReplayingInputCursorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/replay/ReplayingInputCursor.cpp (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/replay/ReplayingInputCursor.cpp        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/WebCore/replay/ReplayingInputCursor.cpp        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -67,7 +67,7 @@
</span><span class="cx"> NondeterministicInputBase* input = uncheckedLoadInput(queue);
</span><span class="cx">
</span><span class="cx"> if (input->type() != type) {
</span><del>- LOG_ERROR("%-25s ERROR: Expected replay input of type %s, but got type %s\n", "[ReplayingInputCursor]", type.string().ascii().data(), input->type().string().ascii().data());
</del><ins>+ LOG_ERROR("%-25s ERROR: Expected replay input of type %s, but got type %s\n", "[ReplayingInputCursor]", type.string().ascii().data(), input->type().ascii().data());
</ins><span class="cx"> return nullptr;
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorereplaySegmentedInputStoragecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/replay/SegmentedInputStorage.cpp (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/replay/SegmentedInputStorage.cpp        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/WebCore/replay/SegmentedInputStorage.cpp        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -93,7 +93,7 @@
</span><span class="cx"> NondeterministicInputBase* input = queue(inputQueue).at(offset).get();
</span><span class="cx"> ASSERT(input);
</span><span class="cx">
</span><del>- LOG(WebReplay, "%-20s %s: %s %s\n", "ReplayEvents", queueTypeToLogPrefix(inputQueue, true), input->type().string().utf8().data(), jsonStringForInput(*input).utf8().data());
</del><ins>+ LOG(WebReplay, "%-20s %s: %s %s\n", "ReplayEvents", queueTypeToLogPrefix(inputQueue, true), input->type().utf8().data(), jsonStringForInput(*input).utf8().data());
</ins><span class="cx">
</span><span class="cx"> return input;
</span><span class="cx"> }
</span><span class="lines">@@ -103,7 +103,7 @@
</span><span class="cx"> ASSERT(input);
</span><span class="cx"> ASSERT(input->queue() < InputQueue::Count);
</span><span class="cx">
</span><del>- LOG(WebReplay, "%-14s#%-5u %s: %s %s\n", "ReplayEvents", m_inputCount++, queueTypeToLogPrefix(input->queue(), false), input->type().string().utf8().data(), jsonStringForInput(*input).utf8().data());
</del><ins>+ LOG(WebReplay, "%-14s#%-5u %s: %s %s\n", "ReplayEvents", m_inputCount++, queueTypeToLogPrefix(input->queue(), false), input->type().utf8().data(), jsonStringForInput(*input).utf8().data());
</ins><span class="cx">
</span><span class="cx"> m_queues.at(offsetForInputQueue(input->queue()))->append(WTF::move(input));
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorereplaySerializationMethodscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/replay/SerializationMethods.cpp (174112 => 174113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/replay/SerializationMethods.cpp        2014-09-30 19:11:48 UTC (rev 174112)
+++ trunk/Source/WebCore/replay/SerializationMethods.cpp        2014-09-30 19:21:25 UTC (rev 174113)
</span><span class="lines">@@ -40,7 +40,6 @@
</span><span class="cx"> #include "PlatformMouseEvent.h"
</span><span class="cx"> #include "PlatformWheelEvent.h"
</span><span class="cx"> #include "PluginData.h"
</span><del>-#include "ReplayInputTypes.h"
</del><span class="cx"> #include "SecurityOrigin.h"
</span><span class="cx"> #include "URL.h"
</span><span class="cx"> #include <wtf/text/Base64.h>
</span><span class="lines">@@ -57,7 +56,6 @@
</span><span class="cx"> using WebCore::PluginInfo;
</span><span class="cx"> using WebCore::SecurityOrigin;
</span><span class="cx"> using WebCore::URL;
</span><del>-using WebCore::inputTypes;
</del><span class="cx">
</span><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx"> using WebCore::KeypressCommand;
</span><span class="lines">@@ -167,12 +165,10 @@
</span><span class="cx"> EncodedValue EncodingTraits<NondeterministicInputBase>::encodeValue(const NondeterministicInputBase& input)
</span><span class="cx"> {
</span><span class="cx"> EncodedValue encodedValue = EncodedValue::createObject();
</span><del>- const AtomicString& type = input.type();
</del><ins>+ ENCODE_TYPE_WITH_KEY(encodedValue, String, type, input.type());
</ins><span class="cx">
</span><del>- ENCODE_TYPE_WITH_KEY(encodedValue, String, type, type.string());
-
</del><span class="cx"> #define ENCODE_IF_TYPE_TAG_MATCHES(name) \
</span><del>- if (type == inputTypes().name) { \
</del><ins>+ if (input.type() == InputTraits<name>::type()) { \
</ins><span class="cx"> InputTraits<name>::encode(encodedValue, static_cast<const name&>(input)); \
</span><span class="cx"> return encodedValue; \
</span><span class="cx"> } \
</span><span class="lines">@@ -182,7 +178,7 @@
</span><span class="cx"> #undef ENCODE_IF_TYPE_TAG_MATCHES
</span><span class="cx">
</span><span class="cx"> // The macro won't work here because of the class template argument.
</span><del>- if (type == inputTypes().MemoizedDOMResult) {
</del><ins>+ if (input.type() == InputTraits<MemoizedDOMResultBase>::type()) {
</ins><span class="cx"> InputTraits<MemoizedDOMResultBase>::encode(encodedValue, static_cast<const MemoizedDOMResultBase&>(input));
</span><span class="cx"> return encodedValue;
</span><span class="cx"> }
</span><span class="lines">@@ -196,7 +192,7 @@
</span><span class="cx"> DECODE_TYPE_WITH_KEY(encodedValue, String, type);
</span><span class="cx">
</span><span class="cx"> #define DECODE_IF_TYPE_TAG_MATCHES(name) \
</span><del>- if (type == inputTypes().name) { \
</del><ins>+ if (type == InputTraits<name>::type()) { \
</ins><span class="cx"> std::unique_ptr<name> decodedInput; \
</span><span class="cx"> if (!InputTraits<name>::decode(encodedValue, decodedInput)) \
</span><span class="cx"> return false; \
</span><span class="lines">@@ -209,7 +205,7 @@
</span><span class="cx"> WEB_REPLAY_INPUT_NAMES_FOR_EACH(DECODE_IF_TYPE_TAG_MATCHES)
</span><span class="cx"> #undef DECODE_IF_TYPE_TAG_MATCHES
</span><span class="cx">
</span><del>- if (type == inputTypes().MemoizedDOMResult) {
</del><ins>+ if (type == InputTraits<MemoizedDOMResultBase>::type()) {
</ins><span class="cx"> std::unique_ptr<MemoizedDOMResultBase> decodedInput;
</span><span class="cx"> if (!InputTraits<MemoizedDOMResultBase>::decode(encodedValue, decodedInput))
</span><span class="cx"> return false;
</span></span></pre>
</div>
</div>
</body>
</html>