<!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>[209269] 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/209269">209269</a></dd>
<dt>Author</dt> <dd>beidson@apple.com</dd>
<dt>Date</dt> <dd>2016-12-02 14:29:17 -0800 (Fri, 02 Dec 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Make IndexedDB.WebProcessKillIDBCleanup even more reliable.
https://bugs.webkit.org/show_bug.cgi?id=165330

Reviewed by Alex Christensen.

The test currently nulls out a RetainPtr&lt;WKWebView&gt; to try to destroy the view and kill the process.

Problem is that doesn't reliably destroy the view.
We should explicitly kill the process instead.

Also, by relocating when we kill the process, we can better test behavior of the IndexedDB mechanism.
e.g. We explicitly confirm that a second WebProcess can simultaneously attach to the same unique database as the first.

* TestWebKitAPI/Tests/WebKit2Cocoa/WebProcessKillIDBCleanup.mm:
(TEST):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWebKit2CocoaWebProcessKillIDBCleanupmm">trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WebProcessKillIDBCleanup.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (209268 => 209269)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2016-12-02 22:27:52 UTC (rev 209268)
+++ trunk/Tools/ChangeLog        2016-12-02 22:29:17 UTC (rev 209269)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2016-12-02  Brady Eidson  &lt;beidson@apple.com&gt;
+
+        Make IndexedDB.WebProcessKillIDBCleanup even more reliable.
+        https://bugs.webkit.org/show_bug.cgi?id=165330
+
+        Reviewed by Alex Christensen.
+
+        The test currently nulls out a RetainPtr&lt;WKWebView&gt; to try to destroy the view and kill the process.
+
+        Problem is that doesn't reliably destroy the view.
+        We should explicitly kill the process instead.
+
+        Also, by relocating when we kill the process, we can better test behavior of the IndexedDB mechanism.
+        e.g. We explicitly confirm that a second WebProcess can simultaneously attach to the same unique database as the first.
+
+        * TestWebKitAPI/Tests/WebKit2Cocoa/WebProcessKillIDBCleanup.mm:
+        (TEST):
+
</ins><span class="cx"> 2016-12-02  Commit Queue  &lt;commit-queue@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, rolling out r209136.
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWebKit2CocoaWebProcessKillIDBCleanupmm"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WebProcessKillIDBCleanup.mm (209268 => 209269)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WebProcessKillIDBCleanup.mm        2016-12-02 22:27:52 UTC (rev 209268)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WebProcessKillIDBCleanup.mm        2016-12-02 22:29:17 UTC (rev 209269)
</span><span class="lines">@@ -32,6 +32,7 @@
</span><span class="cx"> #import &lt;WebKit/WKProcessPoolPrivate.h&gt;
</span><span class="cx"> #import &lt;WebKit/WKUserContentControllerPrivate.h&gt;
</span><span class="cx"> #import &lt;WebKit/WKWebViewConfigurationPrivate.h&gt;
</span><ins>+#import &lt;WebKit/WKWebViewPrivate.h&gt;
</ins><span class="cx"> #import &lt;WebKit/_WKProcessPoolConfiguration.h&gt;
</span><span class="cx"> #import &lt;WebKit/_WKUserStyleSheet.h&gt;
</span><span class="cx"> #import &lt;wtf/Deque.h&gt;
</span><span class="lines">@@ -83,9 +84,6 @@
</span><span class="cx">     RetainPtr&lt;NSString&gt; string3 = (NSString *)[getNextMessage() body];
</span><span class="cx">     RetainPtr&lt;NSString&gt; string4 = (NSString *)[getNextMessage() body];
</span><span class="cx"> 
</span><del>-    // Kill that web process
-    webView = nil;
-
</del><span class="cx">     // Make a new web view with a new web process to finish the test
</span><span class="cx">     RetainPtr&lt;WKWebView&gt; webView2 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
</span><span class="cx"> 
</span><span class="lines">@@ -93,6 +91,10 @@
</span><span class="cx">     [webView2 loadRequest:request];
</span><span class="cx"> 
</span><span class="cx">     RetainPtr&lt;NSString&gt; string5 = (NSString *)[getNextMessage() body];
</span><ins>+
+    // Kill the first web process to unblock the second web processes transaction from starting.
+    [webView _killWebContentProcessAndResetState];
+
</ins><span class="cx">     RetainPtr&lt;NSString&gt; string6 = (NSString *)[getNextMessage() body];
</span><span class="cx"> 
</span><span class="cx">     EXPECT_WK_STREQ(@&quot;UpgradeNeeded&quot;, string1.get());
</span></span></pre>
</div>
</div>

</body>
</html>