<!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>[170660] trunk/Source/WebKit2</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/170660">170660</a></dd>
<dt>Author</dt> <dd>mitz@apple.com</dd>
<dt>Date</dt> <dd>2014-07-01 13:22:58 -0700 (Tue, 01 Jul 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>[Cocoa] Navigation parameter in navigation delegate messages is nil for navigations started by the Web Content process
https://bugs.webkit.org/show_bug.cgi?id=134482

Reviewed by Tim Horton.

* UIProcess/API/APILoaderClient.h:
(API::LoaderClient::didDestroyNavigation): New client function, called when a navigation ID
is not going to be used anymore.

* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _restoreFromSessionState:]): If restoring triggered a navigation, create a
WKNavigation for its ID.

* UIProcess/Cocoa/NavigationState.h:
* UIProcess/Cocoa/NavigationState.mm:
(WebKit::NavigationState::createLoadRequestNavigation): Removed FIXME, because we now remove
navigations from the map in LoaderClient::didDestroyNavigation.
(WebKit::NavigationState::createBackForwardNavigation): Ditto.
(WebKit::NavigationState::createReloadNavigation): Ditto.
(WebKit::NavigationState::createLoadDataNavigation): Ditto.
(WebKit::NavigationState::PolicyClient::decidePolicyForNavigationAction): If we are only
getting a navigation ID now, create a WKNavigation for it. Also changed to create the
NSURLRequest lazily.
(WebKit::NavigationState::LoaderClient::didStartProvisionalLoadForFrame): Assert that
navigationID is not zero and that it maps to an existing WKNavigation.
(WebKit::NavigationState::LoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame):
Ditto.
(WebKit::NavigationState::LoaderClient::didFailProvisionalLoadWithErrorForFrame): Ditto.
(WebKit::NavigationState::LoaderClient::didCommitLoadForFrame): Ditto.
(WebKit::NavigationState::LoaderClient::didFinishDocumentLoadForFrame): Ditto.
(WebKit::NavigationState::LoaderClient::didFinishLoadForFrame): Ditto.
(WebKit::NavigationState::LoaderClient::didFailLoadWithErrorForFrame): Ditto.
(WebKit::NavigationState::LoaderClient::didDestroyNavigation): Override the new client
function to remove the navigation from the map.
(WebKit::NavigationState::LoaderClient::processDidCrash): Clear the navigations map.

* UIProcess/WebFrameListenerProxy.cpp:
(WebKit::WebFrameListenerProxy::WebFrameListenerProxy): Initialize new m_navigationID
member variable.
(WebKit::WebFrameListenerProxy::receivedPolicyDecision): Pass the navigation ID to
WebFrame::receivedPolicyDecision.
* UIProcess/WebFrameListenerProxy.h:
(WebKit::WebFrameListenerProxy::navigationID): Added this accessor.
(WebKit::WebFrameListenerProxy::setNavigationID): Ditto.

* UIProcess/WebFrameProxy.cpp:
(WebKit::WebFrameProxy::receivedPolicyDecision): Added navigationID parameter, which is
passed along to the WebPageProxy.
* UIProcess/WebFrameProxy.h:

* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::receivedPolicyDecision): Added navigationID parameter, which is
passed along in the message to the Web Content process.
(WebKit::WebPageProxy::restoreFromSessionStateData): Changed to return a navigation ID of 0.
(WebKit::WebPageProxy::restoreFromState): Changed to return a navigation ID if one was
started.
(WebKit::WebPageProxy::didDestroyNavigation): Added. Calls the new client function.
(WebKit::WebPageProxy::decidePolicyForNavigationAction): Added navigationID and
newNavigationID parameters. If a main-frame navigation doesn’t already have an ID, assign it
a new ID and return it in the newNavigationID parmeter as well as setting it on the listener
for the asynchronous case.
* UIProcess/WebPageProxy.h:

* UIProcess/WebPageProxy.messages.in: Added navigationID and newNavigationID parameters.

* UIProcess/cf/WebPageProxyCF.cpp:
(WebKit::WebPageProxy::restoreFromSessionStateData): Changed to return a navigation ID if
one was started.

* WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
(WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse): Updated for additional
parameter.
(WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): Send the navigation
ID to the UI process, get the new navigation ID from the reply, and set it on the document
loader.

* WebProcess/WebPage/WebDocumentLoader.cpp:
(WebKit::WebDocumentLoader::detachFromFrame): Override to let the UI process know that the
navigation ID will not be used anymore.
* WebProcess/WebPage/WebDocumentLoader.h:

* WebProcess/WebPage/WebFrame.cpp:
(WebKit::WebFrame::didReceivePolicyDecision): Added navigationID parameter, set it on the
document loader.
(WebKit::WebFrame::documentLoaderDetached): Pass the message along to the UI process.
* WebProcess/WebPage/WebFrame.h:

* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::didReceivePolicyDecision): Pass new navigationID parameter along.
* WebProcess/WebPage/WebPage.h:

* WebProcess/WebPage/WebPage.messages.in: Added navigationID parameter.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIAPILoaderClienth">trunk/Source/WebKit2/UIProcess/API/APILoaderClient.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKWebViewmm">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessCocoaNavigationStateh">trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessCocoaNavigationStatemm">trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebFrameListenerProxycpp">trunk/Source/WebKit2/UIProcess/WebFrameListenerProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebFrameListenerProxyh">trunk/Source/WebKit2/UIProcess/WebFrameListenerProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebFrameProxycpp">trunk/Source/WebKit2/UIProcess/WebFrameProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebFrameProxyh">trunk/Source/WebKit2/UIProcess/WebFrameProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxycpp">trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxyh">trunk/Source/WebKit2/UIProcess/WebPageProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxymessagesin">trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in</a></li>
<li><a href="#trunkSourceWebKit2UIProcesscfWebPageProxyCFcpp">trunk/Source/WebKit2/UIProcess/cf/WebPageProxyCF.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebCoreSupportWebFrameLoaderClientcpp">trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebDocumentLoadercpp">trunk/Source/WebKit2/WebProcess/WebPage/WebDocumentLoader.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebDocumentLoaderh">trunk/Source/WebKit2/WebProcess/WebPage/WebDocumentLoader.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebFramecpp">trunk/Source/WebKit2/WebProcess/WebPage/WebFrame.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebFrameh">trunk/Source/WebKit2/WebProcess/WebPage/WebFrame.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPagecpp">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPageh">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPagemessagesin">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (170659 => 170660)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2014-07-01 19:43:48 UTC (rev 170659)
+++ trunk/Source/WebKit2/ChangeLog        2014-07-01 20:22:58 UTC (rev 170660)
</span><span class="lines">@@ -1,3 +1,98 @@
</span><ins>+2014-07-01  Dan Bernstein  &lt;mitz@apple.com&gt;
+
+        [Cocoa] Navigation parameter in navigation delegate messages is nil for navigations started by the Web Content process
+        https://bugs.webkit.org/show_bug.cgi?id=134482
+
+        Reviewed by Tim Horton.
+
+        * UIProcess/API/APILoaderClient.h:
+        (API::LoaderClient::didDestroyNavigation): New client function, called when a navigation ID
+        is not going to be used anymore.
+
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView _restoreFromSessionState:]): If restoring triggered a navigation, create a
+        WKNavigation for its ID.
+
+        * UIProcess/Cocoa/NavigationState.h:
+        * UIProcess/Cocoa/NavigationState.mm:
+        (WebKit::NavigationState::createLoadRequestNavigation): Removed FIXME, because we now remove
+        navigations from the map in LoaderClient::didDestroyNavigation.
+        (WebKit::NavigationState::createBackForwardNavigation): Ditto.
+        (WebKit::NavigationState::createReloadNavigation): Ditto.
+        (WebKit::NavigationState::createLoadDataNavigation): Ditto.
+        (WebKit::NavigationState::PolicyClient::decidePolicyForNavigationAction): If we are only
+        getting a navigation ID now, create a WKNavigation for it. Also changed to create the
+        NSURLRequest lazily.
+        (WebKit::NavigationState::LoaderClient::didStartProvisionalLoadForFrame): Assert that
+        navigationID is not zero and that it maps to an existing WKNavigation.
+        (WebKit::NavigationState::LoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame):
+        Ditto.
+        (WebKit::NavigationState::LoaderClient::didFailProvisionalLoadWithErrorForFrame): Ditto.
+        (WebKit::NavigationState::LoaderClient::didCommitLoadForFrame): Ditto.
+        (WebKit::NavigationState::LoaderClient::didFinishDocumentLoadForFrame): Ditto.
+        (WebKit::NavigationState::LoaderClient::didFinishLoadForFrame): Ditto.
+        (WebKit::NavigationState::LoaderClient::didFailLoadWithErrorForFrame): Ditto.
+        (WebKit::NavigationState::LoaderClient::didDestroyNavigation): Override the new client
+        function to remove the navigation from the map.
+        (WebKit::NavigationState::LoaderClient::processDidCrash): Clear the navigations map.
+
+        * UIProcess/WebFrameListenerProxy.cpp:
+        (WebKit::WebFrameListenerProxy::WebFrameListenerProxy): Initialize new m_navigationID
+        member variable.
+        (WebKit::WebFrameListenerProxy::receivedPolicyDecision): Pass the navigation ID to
+        WebFrame::receivedPolicyDecision.
+        * UIProcess/WebFrameListenerProxy.h:
+        (WebKit::WebFrameListenerProxy::navigationID): Added this accessor.
+        (WebKit::WebFrameListenerProxy::setNavigationID): Ditto.
+
+        * UIProcess/WebFrameProxy.cpp:
+        (WebKit::WebFrameProxy::receivedPolicyDecision): Added navigationID parameter, which is
+        passed along to the WebPageProxy.
+        * UIProcess/WebFrameProxy.h:
+
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::receivedPolicyDecision): Added navigationID parameter, which is
+        passed along in the message to the Web Content process.
+        (WebKit::WebPageProxy::restoreFromSessionStateData): Changed to return a navigation ID of 0.
+        (WebKit::WebPageProxy::restoreFromState): Changed to return a navigation ID if one was
+        started.
+        (WebKit::WebPageProxy::didDestroyNavigation): Added. Calls the new client function.
+        (WebKit::WebPageProxy::decidePolicyForNavigationAction): Added navigationID and
+        newNavigationID parameters. If a main-frame navigation doesn’t already have an ID, assign it
+        a new ID and return it in the newNavigationID parmeter as well as setting it on the listener
+        for the asynchronous case.
+        * UIProcess/WebPageProxy.h:
+
+        * UIProcess/WebPageProxy.messages.in: Added navigationID and newNavigationID parameters.
+
+        * UIProcess/cf/WebPageProxyCF.cpp:
+        (WebKit::WebPageProxy::restoreFromSessionStateData): Changed to return a navigation ID if
+        one was started.
+
+        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse): Updated for additional
+        parameter.
+        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): Send the navigation
+        ID to the UI process, get the new navigation ID from the reply, and set it on the document
+        loader.
+
+        * WebProcess/WebPage/WebDocumentLoader.cpp:
+        (WebKit::WebDocumentLoader::detachFromFrame): Override to let the UI process know that the
+        navigation ID will not be used anymore.
+        * WebProcess/WebPage/WebDocumentLoader.h:
+
+        * WebProcess/WebPage/WebFrame.cpp:
+        (WebKit::WebFrame::didReceivePolicyDecision): Added navigationID parameter, set it on the
+        document loader.
+        (WebKit::WebFrame::documentLoaderDetached): Pass the message along to the UI process.
+        * WebProcess/WebPage/WebFrame.h:
+
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::didReceivePolicyDecision): Pass new navigationID parameter along.
+        * WebProcess/WebPage/WebPage.h:
+
+        * WebProcess/WebPage/WebPage.messages.in: Added navigationID parameter.
+
</ins><span class="cx"> 2014-07-01  Anders Carlsson  &lt;andersca@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Fix build.
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIAPILoaderClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/APILoaderClient.h (170659 => 170660)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/APILoaderClient.h        2014-07-01 19:43:48 UTC (rev 170659)
+++ trunk/Source/WebKit2/UIProcess/API/APILoaderClient.h        2014-07-01 20:22:58 UTC (rev 170660)
</span><span class="lines">@@ -65,6 +65,7 @@
</span><span class="cx">     virtual void didSameDocumentNavigationForFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, WebKit::SameDocumentNavigationType, API::Object*) { }
</span><span class="cx">     virtual void didReceiveTitleForFrame(WebKit::WebPageProxy*, const WTF::String&amp;, WebKit::WebFrameProxy*, API::Object*) { }
</span><span class="cx">     virtual void didFirstLayoutForFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, API::Object*) { }
</span><ins>+    virtual void didDestroyNavigation(WebKit::WebPageProxy*, uint64_t navigationID) { }
</ins><span class="cx"> 
</span><span class="cx">     // FIXME: We should consider removing didFirstVisuallyNonEmptyLayoutForFrame since it is replaced by didLayout.
</span><span class="cx">     virtual void didFirstVisuallyNonEmptyLayoutForFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, API::Object*) { }
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKWebViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (170659 => 170660)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm        2014-07-01 19:43:48 UTC (rev 170659)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm        2014-07-01 20:22:58 UTC (rev 170660)
</span><span class="lines">@@ -1571,7 +1571,9 @@
</span><span class="cx"> - (void)_restoreFromSessionState:(NSData *)sessionState
</span><span class="cx"> {
</span><span class="cx">     [sessionState retain];
</span><del>-    _page-&gt;restoreFromSessionStateData(API::Data::createWithoutCopying((const unsigned char*)sessionState.bytes, sessionState.length, releaseNSData, sessionState).get());
</del><ins>+    uint64_t navigationID = _page-&gt;restoreFromSessionStateData(API::Data::createWithoutCopying((const unsigned char*)sessionState.bytes, sessionState.length, releaseNSData, sessionState).get());
+    if (navigationID)
+        _navigationState-&gt;createReloadNavigation(navigationID);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (void)_close
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessCocoaNavigationStateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.h (170659 => 170660)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.h        2014-07-01 19:43:48 UTC (rev 170659)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.h        2014-07-01 20:22:58 UTC (rev 170660)
</span><span class="lines">@@ -102,6 +102,7 @@
</span><span class="cx">         virtual void didFinishDocumentLoadForFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, uint64_t navigationID, API::Object*) override;
</span><span class="cx">         virtual void didFinishLoadForFrame(WebPageProxy*, WebFrameProxy*, uint64_t navigationID, API::Object*) override;
</span><span class="cx">         virtual void didFailLoadWithErrorForFrame(WebPageProxy*, WebFrameProxy*, uint64_t navigationID, const WebCore::ResourceError&amp;, API::Object*) override;
</span><ins>+        virtual void didDestroyNavigation(WebKit::WebPageProxy*, uint64_t navigationID) override;
</ins><span class="cx">         virtual void didLayout(WebKit::WebPageProxy*, WebCore::LayoutMilestones, API::Object*) override;
</span><span class="cx">         virtual bool canAuthenticateAgainstProtectionSpaceInFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, WebKit::WebProtectionSpace*) override;
</span><span class="cx">         virtual void didReceiveAuthenticationChallengeInFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, WebKit::AuthenticationChallengeProxy*) override;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessCocoaNavigationStatemm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.mm (170659 => 170660)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.mm        2014-07-01 19:43:48 UTC (rev 170659)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.mm        2014-07-01 20:22:58 UTC (rev 170660)
</span><span class="lines">@@ -42,6 +42,7 @@
</span><span class="cx"> #import &quot;WKNSURLAuthenticationChallenge.h&quot;
</span><span class="cx"> #import &quot;WKNSURLExtras.h&quot;
</span><span class="cx"> #import &quot;WKNSURLProtectionSpace.h&quot;
</span><ins>+#import &quot;WKNSURLRequest.h&quot;
</ins><span class="cx"> #import &quot;WKNavigationActionInternal.h&quot;
</span><span class="cx"> #import &quot;WKNavigationDataInternal.h&quot;
</span><span class="cx"> #import &quot;WKNavigationDelegatePrivate.h&quot;
</span><span class="lines">@@ -163,7 +164,6 @@
</span><span class="cx">     RetainPtr&lt;WKNavigation&gt; navigation = adoptNS([[WKNavigation alloc] init]);
</span><span class="cx">     [navigation setRequest:request];
</span><span class="cx"> 
</span><del>-    // FIXME: We need to remove the navigation when we're done with it!
</del><span class="cx">     m_navigations.set(navigationID, navigation);
</span><span class="cx"> 
</span><span class="cx">     return navigation;
</span><span class="lines">@@ -175,7 +175,6 @@
</span><span class="cx"> 
</span><span class="cx">     auto navigation = adoptNS([[WKNavigation alloc] init]);
</span><span class="cx"> 
</span><del>-    // FIXME: We need to remove the navigation when we're done with it!
</del><span class="cx">     m_navigations.set(navigationID, navigation);
</span><span class="cx"> 
</span><span class="cx">     return navigation;
</span><span class="lines">@@ -187,7 +186,6 @@
</span><span class="cx"> 
</span><span class="cx">     auto navigation = adoptNS([[WKNavigation alloc] init]);
</span><span class="cx"> 
</span><del>-    // FIXME: We need to remove the navigation when we're done with it!
</del><span class="cx">     m_navigations.set(navigationID, navigation);
</span><span class="cx"> 
</span><span class="cx">     return navigation;
</span><span class="lines">@@ -199,7 +197,6 @@
</span><span class="cx"> 
</span><span class="cx">     auto navigation = adoptNS([[WKNavigation alloc] init]);
</span><span class="cx"> 
</span><del>-    // FIXME: We need to remove the navigation when we're done with it!
</del><span class="cx">     m_navigations.set(navigationID, navigation);
</span><span class="cx"> 
</span><span class="cx">     return navigation;
</span><span class="lines">@@ -264,14 +261,18 @@
</span><span class="cx"> 
</span><span class="cx"> void NavigationState::PolicyClient::decidePolicyForNavigationAction(WebPageProxy*, WebFrameProxy* destinationFrame, const NavigationActionData&amp; navigationActionData, WebFrameProxy* sourceFrame, const WebCore::ResourceRequest&amp; originalRequest, const WebCore::ResourceRequest&amp; request, RefPtr&lt;WebFramePolicyListenerProxy&gt; listener, API::Object* userData)
</span><span class="cx"> {
</span><ins>+    RetainPtr&lt;NSURLRequest&gt; nsURLRequest = adoptNS(wrapper(*API::URLRequest::create(request).leakRef()));
+
+    if (listener-&gt;navigationID())
+        m_navigationState.createLoadRequestNavigation(listener-&gt;navigationID(), nsURLRequest.get());
+
</ins><span class="cx">     if (!m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandler) {
</span><span class="cx">         if (!destinationFrame) {
</span><span class="cx">             listener-&gt;use();
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        NSURLRequest *nsURLRequest = request.nsURLRequest(WebCore::DoNotUpdateHTTPBody);
-        if ([NSURLConnection canHandleRequest:nsURLRequest]) {
</del><ins>+        if ([NSURLConnection canHandleRequest:nsURLRequest.get()]) {
</ins><span class="cx">             listener-&gt;use();
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="lines">@@ -279,8 +280,8 @@
</span><span class="cx"> #if PLATFORM(MAC)
</span><span class="cx">         // A file URL shouldn't fall through to here, but if it did,
</span><span class="cx">         // it would be a security risk to open it.
</span><del>-        if (![nsURLRequest.URL isFileURL])
-            [[NSWorkspace sharedWorkspace] openURL:nsURLRequest.URL];
</del><ins>+        if (![[nsURLRequest URL] isFileURL])
+            [[NSWorkspace sharedWorkspace] openURL:[nsURLRequest URL]];
</ins><span class="cx"> #endif
</span><span class="cx">         listener-&gt;ignore();
</span><span class="cx">         return;
</span><span class="lines">@@ -302,7 +303,7 @@
</span><span class="cx">             [navigationAction setSourceFrame:adoptNS([[WKFrameInfo alloc] initWithWebFrameProxy:*sourceFrame]).get()];
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    [navigationAction setRequest:request.nsURLRequest(WebCore::DoNotUpdateHTTPBody)];
</del><ins>+    [navigationAction setRequest:nsURLRequest.get()];
</ins><span class="cx">     [navigationAction _setOriginalURL:originalRequest.url()];
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;CompletionHandlerCallChecker&gt; checker = CompletionHandlerCallChecker::create(navigationDelegate.get(), @selector(webView:decidePolicyForNavigationAction:decisionHandler:));
</span><span class="lines">@@ -412,10 +413,9 @@
</span><span class="cx">     if (!navigationDelegate)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    // FIXME: We should assert that navigationID is not zero here, but it's currently zero for navigations originating from the web process.
-    WKNavigation *navigation = nil;
-    if (navigationID)
-        navigation = m_navigationState.m_navigations.get(navigationID).get();
</del><ins>+    ASSERT(navigationID);
+    WKNavigation *navigation = m_navigationState.m_navigations.get(navigationID).get();
+    ASSERT(navigation);
</ins><span class="cx"> 
</span><span class="cx">     [navigationDelegate webView:m_navigationState.m_webView didStartProvisionalNavigation:navigation];
</span><span class="cx"> }
</span><span class="lines">@@ -432,10 +432,9 @@
</span><span class="cx">     if (!navigationDelegate)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    // FIXME: We should assert that navigationID is not zero here, but it's currently zero for navigations originating from the web process.
-    WKNavigation *navigation = nil;
-    if (navigationID)
-        navigation = m_navigationState.m_navigations.get(navigationID).get();
</del><ins>+    ASSERT(navigationID);
+    WKNavigation *navigation = m_navigationState.m_navigations.get(navigationID).get();
+    ASSERT(navigation);
</ins><span class="cx"> 
</span><span class="cx">     [navigationDelegate webView:m_navigationState.m_webView didReceiveServerRedirectForProvisionalNavigation:navigation];
</span><span class="cx"> }
</span><span class="lines">@@ -468,10 +467,9 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    // FIXME: We should assert that navigationID is not zero here, but it's currently zero for navigations originating from the web process.
-    RetainPtr&lt;WKNavigation&gt; navigation;
-    if (navigationID)
-        navigation = m_navigationState.m_navigations.take(navigationID);
</del><ins>+    ASSERT(navigationID);
+    RetainPtr&lt;WKNavigation&gt; navigation = m_navigationState.m_navigations.take(navigationID).get();
+    ASSERT(navigation);
</ins><span class="cx"> 
</span><span class="cx">     // FIXME: Set the error on the navigation object.
</span><span class="cx"> 
</span><span class="lines">@@ -498,10 +496,9 @@
</span><span class="cx">     if (!navigationDelegate)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    // FIXME: We should assert that navigationID is not zero here, but it's currently zero for navigations originating from the web process.
-    WKNavigation *navigation = nil;
-    if (navigationID)
-        navigation = m_navigationState.m_navigations.get(navigationID).get();
</del><ins>+    ASSERT(navigationID);
+    WKNavigation *navigation = m_navigationState.m_navigations.get(navigationID).get();
+    ASSERT(navigation);
</ins><span class="cx"> 
</span><span class="cx">     [navigationDelegate webView:m_navigationState.m_webView didCommitNavigation:navigation];
</span><span class="cx"> }
</span><span class="lines">@@ -518,9 +515,9 @@
</span><span class="cx">     if (!navigationDelegate)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    WKNavigation *navigation = nil;
-    if (navigationID)
-        navigation = m_navigationState.m_navigations.get(navigationID).get();
</del><ins>+    ASSERT(navigationID);
+    WKNavigation *navigation = m_navigationState.m_navigations.get(navigationID).get();
+    ASSERT(navigation);
</ins><span class="cx"> 
</span><span class="cx">     [static_cast&lt;id &lt;WKNavigationDelegatePrivate&gt;&gt;(navigationDelegate.get()) _webView:m_navigationState.m_webView navigationDidFinishDocumentLoad:navigation];
</span><span class="cx"> }
</span><span class="lines">@@ -537,10 +534,9 @@
</span><span class="cx">     if (!navigationDelegate)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    // FIXME: We should assert that navigationID is not zero here, but it's currently zero for navigations originating from the web process.
-    WKNavigation *navigation = nil;
-    if (navigationID)
-        navigation = m_navigationState.m_navigations.get(navigationID).get();
</del><ins>+    ASSERT(navigationID);
+    WKNavigation *navigation = m_navigationState.m_navigations.get(navigationID).get();
+    ASSERT(navigation);
</ins><span class="cx"> 
</span><span class="cx">     [navigationDelegate webView:m_navigationState.m_webView didFinishNavigation:navigation];
</span><span class="cx"> }
</span><span class="lines">@@ -557,15 +553,19 @@
</span><span class="cx">     if (!navigationDelegate)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    // FIXME: We should assert that navigationID is not zero here, but it's currently zero for navigations originating from the web process.
-    WKNavigation *navigation = nil;
-    if (navigationID)
-        navigation = m_navigationState.m_navigations.get(navigationID).get();
</del><ins>+    ASSERT(navigationID);
+    WKNavigation *navigation = m_navigationState.m_navigations.get(navigationID).get();
+    ASSERT(navigation);
</ins><span class="cx"> 
</span><span class="cx">     auto errorWithRecoveryAttempter = createErrorWithRecoveryAttempter(m_navigationState.m_webView, *webFrameProxy, error);
</span><span class="cx">     [navigationDelegate webView:m_navigationState.m_webView didFailNavigation:navigation withError:errorWithRecoveryAttempter.get()];
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void NavigationState::LoaderClient::didDestroyNavigation(WebPageProxy*, uint64_t navigationID)
+{
+    m_navigationState.m_navigations.remove(navigationID);
+}
+
</ins><span class="cx"> static _WKRenderingProgressEvents renderingProgressEvents(WebCore::LayoutMilestones milestones)
</span><span class="cx"> {
</span><span class="cx">     _WKRenderingProgressEvents events = 0;
</span><span class="lines">@@ -666,6 +666,8 @@
</span><span class="cx"> 
</span><span class="cx"> void NavigationState::LoaderClient::processDidCrash(WebKit::WebPageProxy*)
</span><span class="cx"> {
</span><ins>+    m_navigationState.m_navigations.clear();
+
</ins><span class="cx">     if (!m_navigationState.m_navigationDelegateMethods.webViewWebProcessDidCrash)
</span><span class="cx">         return;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebFrameListenerProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebFrameListenerProxy.cpp (170659 => 170660)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebFrameListenerProxy.cpp        2014-07-01 19:43:48 UTC (rev 170659)
+++ trunk/Source/WebKit2/UIProcess/WebFrameListenerProxy.cpp        2014-07-01 20:22:58 UTC (rev 170660)
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx"> WebFrameListenerProxy::WebFrameListenerProxy(WebFrameProxy* frame, uint64_t listenerID)
</span><span class="cx">     : m_frame(frame)
</span><span class="cx">     , m_listenerID(listenerID)
</span><ins>+    , m_navigationID(0)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -50,7 +51,7 @@
</span><span class="cx">     if (!m_frame)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    m_frame-&gt;receivedPolicyDecision(action, m_listenerID);
</del><ins>+    m_frame-&gt;receivedPolicyDecision(action, m_listenerID, m_navigationID);
</ins><span class="cx">     m_frame = 0;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebFrameListenerProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebFrameListenerProxy.h (170659 => 170660)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebFrameListenerProxy.h        2014-07-01 19:43:48 UTC (rev 170659)
+++ trunk/Source/WebKit2/UIProcess/WebFrameListenerProxy.h        2014-07-01 20:22:58 UTC (rev 170660)
</span><span class="lines">@@ -42,6 +42,9 @@
</span><span class="cx">     void invalidate();
</span><span class="cx">     uint64_t listenerID() const { return m_listenerID; }
</span><span class="cx"> 
</span><ins>+    uint64_t navigationID() const { return m_navigationID; }
+    void setNavigationID(uint64_t navigationID) { m_navigationID = navigationID; }
+
</ins><span class="cx"> protected:
</span><span class="cx">     WebFrameListenerProxy(WebFrameProxy*, uint64_t listenerID);
</span><span class="cx"> 
</span><span class="lines">@@ -50,6 +53,7 @@
</span><span class="cx"> private:
</span><span class="cx">     RefPtr&lt;WebFrameProxy&gt; m_frame;
</span><span class="cx">     uint64_t m_listenerID;
</span><ins>+    uint64_t m_navigationID;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebFrameProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebFrameProxy.cpp (170659 => 170660)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebFrameProxy.cpp        2014-07-01 19:43:48 UTC (rev 170659)
+++ trunk/Source/WebKit2/UIProcess/WebFrameProxy.cpp        2014-07-01 20:22:58 UTC (rev 170660)
</span><span class="lines">@@ -169,14 +169,14 @@
</span><span class="cx">     m_title = title;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebFrameProxy::receivedPolicyDecision(WebCore::PolicyAction action, uint64_t listenerID)
</del><ins>+void WebFrameProxy::receivedPolicyDecision(WebCore::PolicyAction action, uint64_t listenerID, uint64_t navigationID)
</ins><span class="cx"> {
</span><span class="cx">     if (!m_page)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     ASSERT(m_activeListener);
</span><span class="cx">     ASSERT(m_activeListener-&gt;listenerID() == listenerID);
</span><del>-    m_page-&gt;receivedPolicyDecision(action, this, listenerID);
</del><ins>+    m_page-&gt;receivedPolicyDecision(action, this, listenerID, navigationID);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> WebFramePolicyListenerProxy* WebFrameProxy::setUpPolicyListenerProxy(uint64_t listenerID)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebFrameProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebFrameProxy.h (170659 => 170660)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebFrameProxy.h        2014-07-01 19:43:48 UTC (rev 170659)
+++ trunk/Source/WebKit2/UIProcess/WebFrameProxy.h        2014-07-01 20:22:58 UTC (rev 170660)
</span><span class="lines">@@ -109,7 +109,7 @@
</span><span class="cx">     void didChangeTitle(const String&amp;);
</span><span class="cx"> 
</span><span class="cx">     // Policy operations.
</span><del>-    void receivedPolicyDecision(WebCore::PolicyAction, uint64_t listenerID);
</del><ins>+    void receivedPolicyDecision(WebCore::PolicyAction, uint64_t listenerID, uint64_t navigationID = 0);
</ins><span class="cx">     WebFramePolicyListenerProxy* setUpPolicyListenerProxy(uint64_t listenerID);
</span><span class="cx">     WebFormSubmissionListenerProxy* setUpFormSubmissionListenerProxy(uint64_t listenerID);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (170659 => 170660)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2014-07-01 19:43:48 UTC (rev 170659)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2014-07-01 20:22:58 UTC (rev 170660)
</span><span class="lines">@@ -1708,7 +1708,7 @@
</span><span class="cx">     m_process-&gt;send(Messages::WebPage::CenterSelectionInVisibleArea(), m_pageID);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebPageProxy::receivedPolicyDecision(PolicyAction action, WebFrameProxy* frame, uint64_t listenerID)
</del><ins>+void WebPageProxy::receivedPolicyDecision(PolicyAction action, WebFrameProxy* frame, uint64_t listenerID, uint64_t navigationID)
</ins><span class="cx"> {
</span><span class="cx">     if (!isValid())
</span><span class="cx">         return;
</span><span class="lines">@@ -1744,7 +1744,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    m_process-&gt;send(Messages::WebPage::DidReceivePolicyDecision(frame-&gt;frameID(), listenerID, action, downloadID), m_pageID);
</del><ins>+    m_process-&gt;send(Messages::WebPage::DidReceivePolicyDecision(frame-&gt;frameID(), listenerID, action, navigationID, downloadID), m_pageID);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebPageProxy::setUserAgent(const String&amp; userAgent)
</span><span class="lines">@@ -1840,13 +1840,14 @@
</span><span class="cx">     return 0;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebPageProxy::restoreFromSessionStateData(API::Data*)
</del><ins>+uint64_t WebPageProxy::restoreFromSessionStateData(API::Data*)
</ins><span class="cx"> {
</span><span class="cx">     // FIXME: Restore the Page from the passed in session state data.
</span><ins>+    return 0;
</ins><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-void WebPageProxy::restoreFromState(SessionState sessionState)
</del><ins>+uint64_t WebPageProxy::restoreFromState(SessionState sessionState)
</ins><span class="cx"> {
</span><span class="cx">     m_backForwardList-&gt;restoreFromState(std::move(sessionState.backForwardListState));
</span><span class="cx"> 
</span><span class="lines">@@ -1855,13 +1856,13 @@
</span><span class="cx"> 
</span><span class="cx">     // FIXME: Navigating should be separate from state restoration.
</span><span class="cx"> 
</span><del>-    if (!sessionState.provisionalURL.isNull()) {
-        loadRequest(sessionState.provisionalURL);
-        return;
-    }
</del><ins>+    if (!sessionState.provisionalURL.isNull())
+        return loadRequest(sessionState.provisionalURL);
</ins><span class="cx"> 
</span><span class="cx">     if (WebBackForwardListItem* item = m_backForwardList-&gt;currentItem())
</span><del>-        goToBackForwardItem(item);
</del><ins>+        return goToBackForwardItem(item);
+
+    return 0;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool WebPageProxy::supportsTextZoom() const
</span><span class="lines">@@ -2428,6 +2429,11 @@
</span><span class="cx">     m_loaderClient-&gt;didFinishProgress(this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WebPageProxy::didDestroyNavigation(uint64_t navigationID)
+{
+    m_loaderClient-&gt;didDestroyNavigation(this, navigationID);
+}
+
</ins><span class="cx"> void WebPageProxy::didStartProvisionalLoadForFrame(uint64_t frameID, uint64_t navigationID, const String&amp; url, const String&amp; unreachableURL, IPC::MessageDecoder&amp; decoder)
</span><span class="cx"> {
</span><span class="cx">     auto transaction = m_pageLoadState.transaction();
</span><span class="lines">@@ -2772,7 +2778,7 @@
</span><span class="cx">         m_frameSetLargestFrame = value ? m_mainFrame : 0;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebPageProxy::decidePolicyForNavigationAction(uint64_t frameID, const NavigationActionData&amp; navigationActionData, uint64_t originatingFrameID, const WebCore::ResourceRequest&amp; originalRequest, const ResourceRequest&amp; request, uint64_t listenerID, IPC::MessageDecoder&amp; decoder, bool&amp; receivedPolicyAction, uint64_t&amp; policyAction, uint64_t&amp; downloadID)
</del><ins>+void WebPageProxy::decidePolicyForNavigationAction(uint64_t frameID, uint64_t navigationID, const NavigationActionData&amp; navigationActionData, uint64_t originatingFrameID, const WebCore::ResourceRequest&amp; originalRequest, const ResourceRequest&amp; request, uint64_t listenerID, IPC::MessageDecoder&amp; decoder, bool&amp; receivedPolicyAction, uint64_t&amp; newNavigationID, uint64_t&amp; policyAction, uint64_t&amp; downloadID)
</ins><span class="cx"> {
</span><span class="cx">     RefPtr&lt;API::Object&gt; userData;
</span><span class="cx">     WebContextUserMessageDecoder messageDecoder(userData, process());
</span><span class="lines">@@ -2792,6 +2798,10 @@
</span><span class="cx">     WebFrameProxy* originatingFrame = m_process-&gt;webFrame(originatingFrameID);
</span><span class="cx">     
</span><span class="cx">     RefPtr&lt;WebFramePolicyListenerProxy&gt; listener = frame-&gt;setUpPolicyListenerProxy(listenerID);
</span><ins>+    if (!navigationID &amp;&amp; frame-&gt;isMainFrame()) {
+        newNavigationID = generateNavigationID();
+        listener-&gt;setNavigationID(newNavigationID);
+    }
</ins><span class="cx"> 
</span><span class="cx">     ASSERT(!m_inDecidePolicyForNavigationAction);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (170659 => 170660)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2014-07-01 19:43:48 UTC (rev 170659)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2014-07-01 20:22:58 UTC (rev 170660)
</span><span class="lines">@@ -551,8 +551,8 @@
</span><span class="cx">     void terminateProcess();
</span><span class="cx"> 
</span><span class="cx">     PassRefPtr&lt;API::Data&gt; sessionStateData(std::function&lt;bool (WebBackForwardListItem&amp;)&gt;) const;
</span><del>-    void restoreFromSessionStateData(API::Data*);
-    void restoreFromState(SessionState);
</del><ins>+    uint64_t restoreFromSessionStateData(API::Data*);
+    uint64_t restoreFromState(SessionState);
</ins><span class="cx"> 
</span><span class="cx">     bool supportsTextZoom() const;
</span><span class="cx">     double textZoomFactor() const { return m_textZoomFactor; }
</span><span class="lines">@@ -678,7 +678,7 @@
</span><span class="cx">     void performDictionaryLookupAtLocation(const WebCore::FloatPoint&amp;);
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-    void receivedPolicyDecision(WebCore::PolicyAction, WebFrameProxy*, uint64_t listenerID);
</del><ins>+    void receivedPolicyDecision(WebCore::PolicyAction, WebFrameProxy*, uint64_t listenerID, uint64_t navigationID);
</ins><span class="cx"> 
</span><span class="cx">     void backForwardRemovedItem(uint64_t itemID);
</span><span class="cx"> 
</span><span class="lines">@@ -957,8 +957,9 @@
</span><span class="cx">     void didStartProgress();
</span><span class="cx">     void didChangeProgress(double);
</span><span class="cx">     void didFinishProgress();
</span><ins>+    void didDestroyNavigation(uint64_t navigationID);
</ins><span class="cx"> 
</span><del>-    void decidePolicyForNavigationAction(uint64_t frameID, const NavigationActionData&amp;, uint64_t originatingFrameID, const WebCore::ResourceRequest&amp; originalRequest, const WebCore::ResourceRequest&amp;, uint64_t listenerID, IPC::MessageDecoder&amp;, bool&amp; receivedPolicyAction, uint64_t&amp; policyAction, uint64_t&amp; downloadID);
</del><ins>+    void decidePolicyForNavigationAction(uint64_t frameID, uint64_t navigationID, const NavigationActionData&amp;, uint64_t originatingFrameID, const WebCore::ResourceRequest&amp; originalRequest, const WebCore::ResourceRequest&amp;, uint64_t listenerID, IPC::MessageDecoder&amp;, bool&amp; receivedPolicyAction, uint64_t&amp; newNavigationID, uint64_t&amp; policyAction, uint64_t&amp; downloadID);
</ins><span class="cx">     void decidePolicyForNewWindowAction(uint64_t frameID, const NavigationActionData&amp;, const WebCore::ResourceRequest&amp;, const String&amp; frameName, uint64_t listenerID, IPC::MessageDecoder&amp;);
</span><span class="cx">     void decidePolicyForResponse(uint64_t frameID, const WebCore::ResourceResponse&amp;, const WebCore::ResourceRequest&amp;, bool canShowMIMEType, uint64_t listenerID, IPC::MessageDecoder&amp;);
</span><span class="cx">     void decidePolicyForResponseSync(uint64_t frameID, const WebCore::ResourceResponse&amp;, const WebCore::ResourceRequest&amp;, bool canShowMIMEType, uint64_t listenerID, IPC::MessageDecoder&amp;, bool&amp; receivedPolicyAction, uint64_t&amp; policyAction, uint64_t&amp; downloadID);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxymessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in (170659 => 170660)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in        2014-07-01 19:43:48 UTC (rev 170659)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in        2014-07-01 20:22:58 UTC (rev 170660)
</span><span class="lines">@@ -110,7 +110,7 @@
</span><span class="cx"> 
</span><span class="cx">     # Policy messages
</span><span class="cx">     DecidePolicyForResponseSync(uint64_t frameID, WebCore::ResourceResponse response, WebCore::ResourceRequest request, bool canShowMIMEType, uint64_t listenerID, WebKit::InjectedBundleUserMessageEncoder userData) -&gt; (bool receivedPolicyAction, uint64_t policyAction, uint64_t downloadID) Variadic
</span><del>-    DecidePolicyForNavigationAction(uint64_t frameID, WebKit::NavigationActionData navigationActionData, uint64_t originatingFrameID, WebCore::ResourceRequest originalRequest, WebCore::ResourceRequest request, uint64_t listenerID, WebKit::InjectedBundleUserMessageEncoder userData) -&gt; (bool receivedPolicyAction, uint64_t policyAction, uint64_t downloadID) Variadic
</del><ins>+    DecidePolicyForNavigationAction(uint64_t frameID, uint64_t navigationID, WebKit::NavigationActionData navigationActionData, uint64_t originatingFrameID, WebCore::ResourceRequest originalRequest, WebCore::ResourceRequest request, uint64_t listenerID, WebKit::InjectedBundleUserMessageEncoder userData) -&gt; (bool receivedPolicyAction, uint64_t newNavigationID, uint64_t policyAction, uint64_t downloadID) Variadic
</ins><span class="cx">     DecidePolicyForNewWindowAction(uint64_t frameID, WebKit::NavigationActionData navigationActionData, WebCore::ResourceRequest request, String frameName, uint64_t listenerID, WebKit::InjectedBundleUserMessageEncoder userData) Variadic
</span><span class="cx">     UnableToImplementPolicy(uint64_t frameID, WebCore::ResourceError error, WebKit::InjectedBundleUserMessageEncoder userData)  Variadic
</span><span class="cx"> 
</span><span class="lines">@@ -140,6 +140,7 @@
</span><span class="cx">     DidRunInsecureContentForFrame(uint64_t frameID, WebKit::InjectedBundleUserMessageEncoder userData) Variadic
</span><span class="cx">     DidDetectXSSForFrame(uint64_t frameID, WebKit::InjectedBundleUserMessageEncoder userData) Variadic
</span><span class="cx">     DidSameDocumentNavigationForFrame(uint64_t frameID, uint32_t type, String url, WebKit::InjectedBundleUserMessageEncoder userData) Variadic
</span><ins>+    DidDestroyNavigation(uint64_t navigationID)
</ins><span class="cx"> 
</span><span class="cx">     FrameDidBecomeFrameSet(uint64_t frameID, bool value)
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcesscfWebPageProxyCFcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/cf/WebPageProxyCF.cpp (170659 => 170660)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/cf/WebPageProxyCF.cpp        2014-07-01 19:43:48 UTC (rev 170659)
+++ trunk/Source/WebKit2/UIProcess/cf/WebPageProxyCF.cpp        2014-07-01 20:22:58 UTC (rev 170660)
</span><span class="lines">@@ -104,17 +104,17 @@
</span><span class="cx">     return API::Data::create(stateVector);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebPageProxy::restoreFromSessionStateData(API::Data* apiData)
</del><ins>+uint64_t WebPageProxy::restoreFromSessionStateData(API::Data* apiData)
</ins><span class="cx"> {
</span><span class="cx">     if (!apiData || apiData-&gt;size() &lt; sizeof(UInt32))
</span><del>-        return;
</del><ins>+        return 0;
</ins><span class="cx"> 
</span><span class="cx">     const unsigned char* buffer = apiData-&gt;bytes();
</span><span class="cx">     UInt32 versionHeader = (buffer[0] &lt;&lt; 24) + (buffer[1] &lt;&lt; 16) + (buffer[2] &lt;&lt; 8) + buffer[3];
</span><span class="cx">     
</span><span class="cx">     if (versionHeader != CurrentSessionStateDataVersion) {
</span><span class="cx">         LOG(SessionState, &quot;Unrecognized version header for session state data - cannot restore&quot;);
</span><del>-        return;
</del><ins>+        return 0;
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     RetainPtr&lt;CFDataRef&gt; data = adoptCF(CFDataCreate(0, apiData-&gt;bytes() + sizeof(UInt32), apiData-&gt;size() - sizeof(UInt32)));
</span><span class="lines">@@ -124,15 +124,15 @@
</span><span class="cx">     if (propertyListError) {
</span><span class="cx">         CFRelease(propertyListError);
</span><span class="cx">         LOG(SessionState, &quot;Could not read session state property list&quot;);
</span><del>-        return;
</del><ins>+        return 0;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (!propertyList)
</span><del>-        return;
</del><ins>+        return 0;
</ins><span class="cx">         
</span><span class="cx">     if (CFGetTypeID(propertyList.get()) != CFDictionaryGetTypeID()) {
</span><span class="cx">         LOG(SessionState, &quot;SessionState property list is not a CFDictionaryRef (%i) - its CFTypeID is %i&quot;, (int)CFDictionaryGetTypeID(), (int)CFGetTypeID(propertyList.get()));
</span><del>-        return;
</del><ins>+        return 0;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     CFDictionaryRef backForwardListDictionary = 0;
</span><span class="lines">@@ -169,14 +169,18 @@
</span><span class="cx">                     if (WebBackForwardListItem* item = m_backForwardList-&gt;currentItem())
</span><span class="cx">                         m_pageLoadState.setPendingAPIRequestURL(transaction, item-&gt;url());
</span><span class="cx"> 
</span><del>-                    process().send(Messages::WebPage::RestoreSessionAndNavigateToCurrentItem(generateNavigationID(), state), m_pageID);
</del><ins>+                    uint64_t navigationID = generateNavigationID();
+                    process().send(Messages::WebPage::RestoreSessionAndNavigateToCurrentItem(navigationID, state), m_pageID);
+                    return navigationID;
</ins><span class="cx">                 }
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (provisionalURL)
</span><del>-        loadRequest(URL(URL(), provisionalURL));
</del><ins>+        return loadRequest(URL(URL(), provisionalURL));
+
+    return 0;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static RetainPtr&lt;CFStringRef&gt; autosaveKey(const String&amp; name)
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebCoreSupportWebFrameLoaderClientcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp (170659 => 170660)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp        2014-07-01 19:43:48 UTC (rev 170659)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp        2014-07-01 20:22:58 UTC (rev 170660)
</span><span class="lines">@@ -670,7 +670,7 @@
</span><span class="cx"> 
</span><span class="cx">     // We call this synchronously because CFNetwork can only convert a loading connection to a download from its didReceiveResponse callback.
</span><span class="cx">     if (receivedPolicyAction)
</span><del>-        m_frame-&gt;didReceivePolicyDecision(listenerID, static_cast&lt;PolicyAction&gt;(policyAction), downloadID);
</del><ins>+        m_frame-&gt;didReceivePolicyDecision(listenerID, static_cast&lt;PolicyAction&gt;(policyAction), 0, downloadID);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction(const NavigationAction&amp; navigationAction, const ResourceRequest&amp; request, PassRefPtr&lt;FormState&gt; formState, const String&amp; frameName, FramePolicyFunction function)
</span><span class="lines">@@ -729,6 +729,7 @@
</span><span class="cx">     
</span><span class="cx">     uint64_t listenerID = m_frame-&gt;setUpPolicyListener(std::move(function));
</span><span class="cx">     bool receivedPolicyAction;
</span><ins>+    uint64_t newNavigationID;
</ins><span class="cx">     uint64_t policyAction;
</span><span class="cx">     uint64_t downloadID;
</span><span class="cx"> 
</span><span class="lines">@@ -760,13 +761,18 @@
</span><span class="cx">     navigationActionData.isProcessingUserGesture = navigationAction.processingUserGesture();
</span><span class="cx">     navigationActionData.canHandleRequest = webPage-&gt;canHandleRequest(request);
</span><span class="cx"> 
</span><ins>+    WebCore::Frame* coreFrame = m_frame-&gt;coreFrame();
+    WebDocumentLoader* documentLoader = static_cast&lt;WebDocumentLoader*&gt;(coreFrame-&gt;loader().policyDocumentLoader());
+    if (!documentLoader)
+        documentLoader = static_cast&lt;WebDocumentLoader*&gt;(coreFrame-&gt;loader().documentLoader());
+
</ins><span class="cx">     // Notify the UIProcess.
</span><del>-    if (!webPage-&gt;sendSync(Messages::WebPageProxy::DecidePolicyForNavigationAction(m_frame-&gt;frameID(), navigationActionData, originatingFrame ? originatingFrame-&gt;frameID() : 0, navigationAction.resourceRequest(), request, listenerID, InjectedBundleUserMessageEncoder(userData.get())), Messages::WebPageProxy::DecidePolicyForNavigationAction::Reply(receivedPolicyAction, policyAction, downloadID)))
</del><ins>+    if (!webPage-&gt;sendSync(Messages::WebPageProxy::DecidePolicyForNavigationAction(m_frame-&gt;frameID(), documentLoader-&gt;navigationID(), navigationActionData, originatingFrame ? originatingFrame-&gt;frameID() : 0, navigationAction.resourceRequest(), request, listenerID, InjectedBundleUserMessageEncoder(userData.get())), Messages::WebPageProxy::DecidePolicyForNavigationAction::Reply(receivedPolicyAction, newNavigationID, policyAction, downloadID)))
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     // We call this synchronously because WebCore cannot gracefully handle a frame load without a synchronous navigation policy reply.
</span><span class="cx">     if (receivedPolicyAction)
</span><del>-        m_frame-&gt;didReceivePolicyDecision(listenerID, static_cast&lt;PolicyAction&gt;(policyAction), downloadID);
</del><ins>+        m_frame-&gt;didReceivePolicyDecision(listenerID, static_cast&lt;PolicyAction&gt;(policyAction), newNavigationID, downloadID);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebFrameLoaderClient::cancelPolicyCheck()
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebDocumentLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebDocumentLoader.cpp (170659 => 170660)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebDocumentLoader.cpp        2014-07-01 19:43:48 UTC (rev 170659)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebDocumentLoader.cpp        2014-07-01 20:22:58 UTC (rev 170660)
</span><span class="lines">@@ -26,6 +26,8 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;WebDocumentLoader.h&quot;
</span><span class="cx"> 
</span><ins>+#include &quot;WebFrame.h&quot;
+
</ins><span class="cx"> using namespace WebCore;
</span><span class="cx"> 
</span><span class="cx"> namespace WebKit {
</span><span class="lines">@@ -36,6 +38,16 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WebDocumentLoader::detachFromFrame()
+{
+    if (m_navigationID)
+        WebFrame::fromCoreFrame(*frame())-&gt;documentLoaderDetached(m_navigationID);
+
+    m_navigationID = 0;
+
+    DocumentLoader::detachFromFrame();
+}
+
</ins><span class="cx"> void WebDocumentLoader::setNavigationID(uint64_t navigationID)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(navigationID);
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebDocumentLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebDocumentLoader.h (170659 => 170660)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebDocumentLoader.h        2014-07-01 19:43:48 UTC (rev 170659)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebDocumentLoader.h        2014-07-01 20:22:58 UTC (rev 170660)
</span><span class="lines">@@ -43,6 +43,8 @@
</span><span class="cx"> private:
</span><span class="cx">     WebDocumentLoader(const WebCore::ResourceRequest&amp;, const WebCore::SubstituteData&amp;);
</span><span class="cx"> 
</span><ins>+    virtual void detachFromFrame() override;
+
</ins><span class="cx">     uint64_t m_navigationID;
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebFramecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebFrame.cpp (170659 => 170660)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebFrame.cpp        2014-07-01 19:43:48 UTC (rev 170659)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebFrame.cpp        2014-07-01 20:22:58 UTC (rev 170660)
</span><span class="lines">@@ -36,6 +36,7 @@
</span><span class="cx"> #include &quot;WKAPICast.h&quot;
</span><span class="cx"> #include &quot;WKBundleAPICast.h&quot;
</span><span class="cx"> #include &quot;WebChromeClient.h&quot;
</span><ins>+#include &quot;WebDocumentLoader.h&quot;
</ins><span class="cx"> #include &quot;WebPage.h&quot;
</span><span class="cx"> #include &quot;WebPageProxyMessages.h&quot;
</span><span class="cx"> #include &quot;WebProcess.h&quot;
</span><span class="lines">@@ -215,7 +216,7 @@
</span><span class="cx">     m_policyFunction = 0;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebFrame::didReceivePolicyDecision(uint64_t listenerID, PolicyAction action, uint64_t downloadID)
</del><ins>+void WebFrame::didReceivePolicyDecision(uint64_t listenerID, PolicyAction action, uint64_t navigationID, uint64_t downloadID)
</ins><span class="cx"> {
</span><span class="cx">     if (!m_coreFrame)
</span><span class="cx">         return;
</span><span class="lines">@@ -233,6 +234,11 @@
</span><span class="cx">     invalidatePolicyListener();
</span><span class="cx"> 
</span><span class="cx">     m_policyDownloadID = downloadID;
</span><ins>+    if (navigationID) {
+        WebDocumentLoader&amp; documentLoader = static_cast&lt;WebDocumentLoader&amp;&gt;(*m_coreFrame-&gt;loader().policyDocumentLoader());
+        documentLoader.setNavigationID(navigationID);
+    }
+
</ins><span class="cx">     function(action);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -751,6 +757,11 @@
</span><span class="cx">         m_coreFrame-&gt;editor().setBaseWritingDirection(RightToLeftWritingDirection);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WebFrame::documentLoaderDetached(uint64_t navigationID)
+{
+    page()-&gt;send(Messages::WebPageProxy::DidDestroyNavigation(navigationID));
+}
+
</ins><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx"> RetainPtr&lt;CFDataRef&gt; WebFrame::webArchiveData(FrameFilterFunction callback, void* context)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebFrameh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebFrame.h (170659 => 170660)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebFrame.h        2014-07-01 19:43:48 UTC (rev 170659)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebFrame.h        2014-07-01 20:22:58 UTC (rev 170660)
</span><span class="lines">@@ -77,7 +77,7 @@
</span><span class="cx"> 
</span><span class="cx">     uint64_t setUpPolicyListener(WebCore::FramePolicyFunction);
</span><span class="cx">     void invalidatePolicyListener();
</span><del>-    void didReceivePolicyDecision(uint64_t listenerID, WebCore::PolicyAction, uint64_t downloadID);
</del><ins>+    void didReceivePolicyDecision(uint64_t listenerID, WebCore::PolicyAction, uint64_t navigationID, uint64_t downloadID);
</ins><span class="cx"> 
</span><span class="cx">     void startDownload(const WebCore::ResourceRequest&amp;);
</span><span class="cx">     void convertMainResourceLoadToDownload(WebCore::DocumentLoader*, const WebCore::ResourceRequest&amp;, const WebCore::ResourceResponse&amp;);
</span><span class="lines">@@ -131,6 +131,8 @@
</span><span class="cx"> 
</span><span class="cx">     void setTextDirection(const String&amp;);
</span><span class="cx"> 
</span><ins>+    void documentLoaderDetached(uint64_t navigationID);
+
</ins><span class="cx">     // Simple listener class used by plug-ins to know when frames finish or fail loading.
</span><span class="cx">     class LoadListener {
</span><span class="cx">     public:
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (170659 => 170660)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2014-07-01 19:43:48 UTC (rev 170659)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2014-07-01 20:22:58 UTC (rev 170660)
</span><span class="lines">@@ -2254,12 +2254,12 @@
</span><span class="cx">     m_page-&gt;setSessionID(sessionID);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebPage::didReceivePolicyDecision(uint64_t frameID, uint64_t listenerID, uint32_t policyAction, uint64_t downloadID)
</del><ins>+void WebPage::didReceivePolicyDecision(uint64_t frameID, uint64_t listenerID, uint32_t policyAction, uint64_t navigationID, uint64_t downloadID)
</ins><span class="cx"> {
</span><span class="cx">     WebFrame* frame = WebProcess::shared().webFrame(frameID);
</span><span class="cx">     if (!frame)
</span><span class="cx">         return;
</span><del>-    frame-&gt;didReceivePolicyDecision(listenerID, static_cast&lt;PolicyAction&gt;(policyAction), downloadID);
</del><ins>+    frame-&gt;didReceivePolicyDecision(listenerID, static_cast&lt;PolicyAction&gt;(policyAction), navigationID, downloadID);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebPage::didStartPageTransition()
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPageh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h (170659 => 170660)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h        2014-07-01 19:43:48 UTC (rev 170659)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h        2014-07-01 20:22:58 UTC (rev 170660)
</span><span class="lines">@@ -959,7 +959,7 @@
</span><span class="cx">     void platformPreferencesDidChange(const WebPreferencesStore&amp;);
</span><span class="cx">     void updatePreferences(const WebPreferencesStore&amp;);
</span><span class="cx"> 
</span><del>-    void didReceivePolicyDecision(uint64_t frameID, uint64_t listenerID, uint32_t policyAction, uint64_t downloadID);
</del><ins>+    void didReceivePolicyDecision(uint64_t frameID, uint64_t listenerID, uint32_t policyAction, uint64_t navigationID, uint64_t downloadID);
</ins><span class="cx">     void setUserAgent(const String&amp;);
</span><span class="cx">     void setCustomTextEncodingName(const String&amp;);
</span><span class="cx">     void suspendActiveDOMObjectsAndAnimations();
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPagemessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in (170659 => 170660)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in        2014-07-01 19:43:48 UTC (rev 170659)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in        2014-07-01 20:22:58 UTC (rev 170660)
</span><span class="lines">@@ -134,7 +134,7 @@
</span><span class="cx"> 
</span><span class="cx">     DidRemoveBackForwardItem(uint64_t backForwardItemID)
</span><span class="cx"> 
</span><del>-    DidReceivePolicyDecision(uint64_t frameID, uint64_t listenerID, uint32_t policyAction, uint64_t downloadID)
</del><ins>+    DidReceivePolicyDecision(uint64_t frameID, uint64_t listenerID, uint32_t policyAction, uint64_t navigationID, uint64_t downloadID)
</ins><span class="cx"> 
</span><span class="cx">     ClearSelection()
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>