<!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>[192219] releases/WebKitGTK/webkit-2.10/Source/WebCore</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/192219">192219</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2015-11-10 02:43:38 -0800 (Tue, 10 Nov 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Merge <a href="http://trac.webkit.org/projects/webkit/changeset/191636">r191636</a> - Cancel navigation policy checks like we do content policy checks.
https://bugs.webkit.org/show_bug.cgi?id=150582
rdar://problem/22077579

Reviewed by Brent Fulgham.

This was verified manually and I'll write a layout test for it soon.

* loader/DocumentLoader.cpp:
(WebCore::DocumentLoader::DocumentLoader):
(WebCore::DocumentLoader::~DocumentLoader):
(WebCore::DocumentLoader::willSendRequest):
(WebCore::DocumentLoader::continueAfterNavigationPolicy):
(WebCore::DocumentLoader::cancelPolicyCheckIfNeeded):
* loader/DocumentLoader.h:
Add a bool to keep track of whether we are waiting for navigation policy checks, like we do with content policy checks.
Without this check, sometimes callbacks are made to DocumentLoaders that do not exist any more because they do not get
cancelled by cancelPolicyCheckIfNeeded when detaching from the frame.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#releasesWebKitGTKwebkit210SourceWebCoreChangeLog">releases/WebKitGTK/webkit-2.10/Source/WebCore/ChangeLog</a></li>
<li><a href="#releasesWebKitGTKwebkit210SourceWebCoreloaderDocumentLoadercpp">releases/WebKitGTK/webkit-2.10/Source/WebCore/loader/DocumentLoader.cpp</a></li>
<li><a href="#releasesWebKitGTKwebkit210SourceWebCoreloaderDocumentLoaderh">releases/WebKitGTK/webkit-2.10/Source/WebCore/loader/DocumentLoader.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="releasesWebKitGTKwebkit210SourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/ChangeLog (192218 => 192219)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/Source/WebCore/ChangeLog        2015-11-10 10:40:28 UTC (rev 192218)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/ChangeLog        2015-11-10 10:43:38 UTC (rev 192219)
</span><span class="lines">@@ -1,3 +1,24 @@
</span><ins>+2015-10-27  Alex Christensen  &lt;achristensen@webkit.org&gt;
+
+        Cancel navigation policy checks like we do content policy checks.
+        https://bugs.webkit.org/show_bug.cgi?id=150582
+        rdar://problem/22077579
+
+        Reviewed by Brent Fulgham.
+
+        This was verified manually and I'll write a layout test for it soon.
+
+        * loader/DocumentLoader.cpp:
+        (WebCore::DocumentLoader::DocumentLoader):
+        (WebCore::DocumentLoader::~DocumentLoader):
+        (WebCore::DocumentLoader::willSendRequest):
+        (WebCore::DocumentLoader::continueAfterNavigationPolicy):
+        (WebCore::DocumentLoader::cancelPolicyCheckIfNeeded):
+        * loader/DocumentLoader.h:
+        Add a bool to keep track of whether we are waiting for navigation policy checks, like we do with content policy checks.
+        Without this check, sometimes callbacks are made to DocumentLoaders that do not exist any more because they do not get
+        cancelled by cancelPolicyCheckIfNeeded when detaching from the frame.
+
</ins><span class="cx"> 2015-10-27  Keith Rollin  &lt;krollin@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Do not sanitize user input for input[type=url]
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit210SourceWebCoreloaderDocumentLoadercpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/loader/DocumentLoader.cpp (192218 => 192219)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/Source/WebCore/loader/DocumentLoader.cpp        2015-11-10 10:40:28 UTC (rev 192218)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/loader/DocumentLoader.cpp        2015-11-10 10:43:38 UTC (rev 192219)
</span><span class="lines">@@ -138,7 +138,6 @@
</span><span class="cx">     , m_timeOfLastDataReceived(0.0)
</span><span class="cx">     , m_identifierForLoadWithoutResourceLoader(0)
</span><span class="cx">     , m_dataLoadTimer(*this, &amp;DocumentLoader::handleSubstituteDataLoadNow)
</span><del>-    , m_waitingForContentPolicy(false)
</del><span class="cx">     , m_subresourceLoadersArePageCacheAcceptable(false)
</span><span class="cx">     , m_applicationCacheHost(std::make_unique&lt;ApplicationCacheHost&gt;(*this))
</span><span class="cx"> #if ENABLE(CONTENT_FILTERING)
</span><span class="lines">@@ -163,6 +162,7 @@
</span><span class="cx"> {
</span><span class="cx">     ASSERT(!m_frame || frameLoader()-&gt;activeDocumentLoader() != this || !isLoading());
</span><span class="cx">     ASSERT_WITH_MESSAGE(!m_waitingForContentPolicy, &quot;The content policy callback should never outlive its DocumentLoader.&quot;);
</span><ins>+    ASSERT_WITH_MESSAGE(!m_waitingForNavigationPolicy, &quot;The navigation policy callback should never outlive its DocumentLoader.&quot;);
</ins><span class="cx">     if (m_iconLoadDecisionCallback)
</span><span class="cx">         m_iconLoadDecisionCallback-&gt;invalidate();
</span><span class="cx">     if (m_iconDataCallback)
</span><span class="lines">@@ -572,6 +572,8 @@
</span><span class="cx">     if (redirectResponse.isNull())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><ins>+    ASSERT(!m_waitingForNavigationPolicy);
+    m_waitingForNavigationPolicy = true;
</ins><span class="cx">     frameLoader()-&gt;policyChecker().checkNavigationPolicy(newRequest, [this](const ResourceRequest&amp; request, PassRefPtr&lt;FormState&gt;, bool shouldContinue) {
</span><span class="cx">         continueAfterNavigationPolicy(request, shouldContinue);
</span><span class="cx">     });
</span><span class="lines">@@ -579,6 +581,8 @@
</span><span class="cx"> 
</span><span class="cx"> void DocumentLoader::continueAfterNavigationPolicy(const ResourceRequest&amp;, bool shouldContinue)
</span><span class="cx"> {
</span><ins>+    ASSERT(m_waitingForNavigationPolicy);
+    m_waitingForNavigationPolicy = false;
</ins><span class="cx">     if (!shouldContinue)
</span><span class="cx">         stopLoadingForPolicyChange();
</span><span class="cx">     else if (m_substituteData.isValid()) {
</span><span class="lines">@@ -1482,9 +1486,10 @@
</span><span class="cx"> {
</span><span class="cx">     RELEASE_ASSERT(frameLoader());
</span><span class="cx"> 
</span><del>-    if (m_waitingForContentPolicy) {
</del><ins>+    if (m_waitingForContentPolicy || m_waitingForNavigationPolicy) {
</ins><span class="cx">         frameLoader()-&gt;policyChecker().cancelCheck();
</span><span class="cx">         m_waitingForContentPolicy = false;
</span><ins>+        m_waitingForNavigationPolicy = false;
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit210SourceWebCoreloaderDocumentLoaderh"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/loader/DocumentLoader.h (192218 => 192219)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/Source/WebCore/loader/DocumentLoader.h        2015-11-10 10:40:28 UTC (rev 192218)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/loader/DocumentLoader.h        2015-11-10 10:43:38 UTC (rev 192219)
</span><span class="lines">@@ -317,7 +317,6 @@
</span><span class="cx">         bool isPostOrRedirectAfterPost(const ResourceRequest&amp;, const ResourceResponse&amp;);
</span><span class="cx"> 
</span><span class="cx">         void continueAfterNavigationPolicy(const ResourceRequest&amp;, bool shouldContinue);
</span><del>-
</del><span class="cx">         void continueAfterContentPolicy(PolicyAction);
</span><span class="cx"> 
</span><span class="cx">         void stopLoadingForPolicyChange();
</span><span class="lines">@@ -428,7 +427,8 @@
</span><span class="cx">         unsigned long m_identifierForLoadWithoutResourceLoader;
</span><span class="cx"> 
</span><span class="cx">         DocumentLoaderTimer m_dataLoadTimer;
</span><del>-        bool m_waitingForContentPolicy;
</del><ins>+        bool m_waitingForContentPolicy { false };
+        bool m_waitingForNavigationPolicy { false };
</ins><span class="cx"> 
</span><span class="cx">         RefPtr&lt;IconLoadDecisionCallback&gt; m_iconLoadDecisionCallback;
</span><span class="cx">         RefPtr&lt;IconDataCallback&gt; m_iconDataCallback;
</span></span></pre>
</div>
</div>

</body>
</html>