<!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>[189246] trunk/Tools</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/189246">189246</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2015-09-02 05:12:09 -0700 (Wed, 02 Sep 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>REGRESSION(<a href="http://trac.webkit.org/projects/webkit/changeset/188548">r188548</a>): Some tests crash after <a href="http://trac.webkit.org/projects/webkit/changeset/188548">r188548</a> because injected bundle messages are received after the test finishes
https://bugs.webkit.org/show_bug.cgi?id=148529

Reviewed by Darin Adler.

When there are pending EventSender messages after a test finishes,
they could be processed in the main loop started by the
resetStateToConsistentValues(), but the old EventSender has been
replaced by a new one at that point. The new Eventsender can crash
when processing messages that were sent to the old one. To avoid
this, we return early when receiving an EventSender message and
the TestController state is not RunningTest.

* WebKitTestRunner/TestController.cpp:
(WTR::TestController::didReceiveKeyDownMessageFromInjectedBundle):
(WTR::TestController::didReceiveMessageFromInjectedBundle):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsWebKitTestRunnerTestControllercpp">trunk/Tools/WebKitTestRunner/TestController.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (189245 => 189246)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2015-09-02 12:00:37 UTC (rev 189245)
+++ trunk/Tools/ChangeLog        2015-09-02 12:12:09 UTC (rev 189246)
</span><span class="lines">@@ -1,5 +1,24 @@
</span><span class="cx"> 2015-09-02  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
</span><span class="cx"> 
</span><ins>+        REGRESSION(r188548): Some tests crash after r188548 because injected bundle messages are received after the test finishes
+        https://bugs.webkit.org/show_bug.cgi?id=148529
+
+        Reviewed by Darin Adler.
+
+        When there are pending EventSender messages after a test finishes,
+        they could be processed in the main loop started by the
+        resetStateToConsistentValues(), but the old EventSender has been
+        replaced by a new one at that point. The new Eventsender can crash
+        when processing messages that were sent to the old one. To avoid
+        this, we return early when receiving an EventSender message and
+        the TestController state is not RunningTest.
+
+        * WebKitTestRunner/TestController.cpp:
+        (WTR::TestController::didReceiveKeyDownMessageFromInjectedBundle):
+        (WTR::TestController::didReceiveMessageFromInjectedBundle):
+
+2015-09-02  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
+
</ins><span class="cx">         REGRESSION(r188548): TestController state is Resseting while tests are running after r188548
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=148528
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkToolsWebKitTestRunnerTestControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/WebKitTestRunner/TestController.cpp (189245 => 189246)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebKitTestRunner/TestController.cpp        2015-09-02 12:00:37 UTC (rev 189245)
+++ trunk/Tools/WebKitTestRunner/TestController.cpp        2015-09-02 12:12:09 UTC (rev 189246)
</span><span class="lines">@@ -1019,6 +1019,9 @@
</span><span class="cx"> void TestController::didReceiveMessageFromInjectedBundle(WKStringRef messageName, WKTypeRef messageBody)
</span><span class="cx"> {
</span><span class="cx">     if (WKStringIsEqualToUTF8CString(messageName, &quot;EventSender&quot;)) {
</span><ins>+        if (m_state != RunningTest)
+            return;
+
</ins><span class="cx">         ASSERT(WKGetTypeID(messageBody) == WKDictionaryGetTypeID());
</span><span class="cx">         WKDictionaryRef messageBodyDictionary = static_cast&lt;WKDictionaryRef&gt;(messageBody);
</span><span class="cx"> 
</span><span class="lines">@@ -1089,6 +1092,9 @@
</span><span class="cx"> WKRetainPtr&lt;WKTypeRef&gt; TestController::didReceiveSynchronousMessageFromInjectedBundle(WKStringRef messageName, WKTypeRef messageBody)
</span><span class="cx"> {
</span><span class="cx">     if (WKStringIsEqualToUTF8CString(messageName, &quot;EventSender&quot;)) {
</span><ins>+        if (m_state != RunningTest)
+            return nullptr;
+
</ins><span class="cx">         ASSERT(WKGetTypeID(messageBody) == WKDictionaryGetTypeID());
</span><span class="cx">         WKDictionaryRef messageBodyDictionary = static_cast&lt;WKDictionaryRef&gt;(messageBody);
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>