<!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 <mitz@apple.com>
+
+ [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 <andersca@apple.com>
</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&, 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->restoreFromSessionStateData(API::Data::createWithoutCopying((const unsigned char*)sessionState.bytes, sessionState.length, releaseNSData, sessionState).get());
</del><ins>+ uint64_t navigationID = _page->restoreFromSessionStateData(API::Data::createWithoutCopying((const unsigned char*)sessionState.bytes, sessionState.length, releaseNSData, sessionState).get());
+ if (navigationID)
+ _navigationState->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&, 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 "WKNSURLAuthenticationChallenge.h"
</span><span class="cx"> #import "WKNSURLExtras.h"
</span><span class="cx"> #import "WKNSURLProtectionSpace.h"
</span><ins>+#import "WKNSURLRequest.h"
</ins><span class="cx"> #import "WKNavigationActionInternal.h"
</span><span class="cx"> #import "WKNavigationDataInternal.h"
</span><span class="cx"> #import "WKNavigationDelegatePrivate.h"
</span><span class="lines">@@ -163,7 +164,6 @@
</span><span class="cx"> RetainPtr<WKNavigation> 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& navigationActionData, WebFrameProxy* sourceFrame, const WebCore::ResourceRequest& originalRequest, const WebCore::ResourceRequest& request, RefPtr<WebFramePolicyListenerProxy> listener, API::Object* userData)
</span><span class="cx"> {
</span><ins>+ RetainPtr<NSURLRequest> nsURLRequest = adoptNS(wrapper(*API::URLRequest::create(request).leakRef()));
+
+ if (listener->navigationID())
+ m_navigationState.createLoadRequestNavigation(listener->navigationID(), nsURLRequest.get());
+
</ins><span class="cx"> if (!m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandler) {
</span><span class="cx"> if (!destinationFrame) {
</span><span class="cx"> listener->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->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->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<CompletionHandlerCallChecker> 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<WKNavigation> navigation;
- if (navigationID)
- navigation = m_navigationState.m_navigations.take(navigationID);
</del><ins>+ ASSERT(navigationID);
+ RetainPtr<WKNavigation> 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<id <WKNavigationDelegatePrivate>>(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->receivedPolicyDecision(action, m_listenerID);
</del><ins>+ m_frame->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<WebFrameProxy> 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->listenerID() == listenerID);
</span><del>- m_page->receivedPolicyDecision(action, this, listenerID);
</del><ins>+ m_page->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&);
</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->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->send(Messages::WebPage::DidReceivePolicyDecision(frame->frameID(), listenerID, action, downloadID), m_pageID);
</del><ins>+ m_process->send(Messages::WebPage::DidReceivePolicyDecision(frame->frameID(), listenerID, action, navigationID, downloadID), m_pageID);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void WebPageProxy::setUserAgent(const String& 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->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->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->didFinishProgress(this);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void WebPageProxy::didDestroyNavigation(uint64_t navigationID)
+{
+ m_loaderClient->didDestroyNavigation(this, navigationID);
+}
+
</ins><span class="cx"> void WebPageProxy::didStartProvisionalLoadForFrame(uint64_t frameID, uint64_t navigationID, const String& url, const String& unreachableURL, IPC::MessageDecoder& 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& navigationActionData, uint64_t originatingFrameID, const WebCore::ResourceRequest& originalRequest, const ResourceRequest& request, uint64_t listenerID, IPC::MessageDecoder& decoder, bool& receivedPolicyAction, uint64_t& policyAction, uint64_t& downloadID)
</del><ins>+void WebPageProxy::decidePolicyForNavigationAction(uint64_t frameID, uint64_t navigationID, const NavigationActionData& navigationActionData, uint64_t originatingFrameID, const WebCore::ResourceRequest& originalRequest, const ResourceRequest& request, uint64_t listenerID, IPC::MessageDecoder& decoder, bool& receivedPolicyAction, uint64_t& newNavigationID, uint64_t& policyAction, uint64_t& downloadID)
</ins><span class="cx"> {
</span><span class="cx"> RefPtr<API::Object> 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->webFrame(originatingFrameID);
</span><span class="cx">
</span><span class="cx"> RefPtr<WebFramePolicyListenerProxy> listener = frame->setUpPolicyListenerProxy(listenerID);
</span><ins>+ if (!navigationID && frame->isMainFrame()) {
+ newNavigationID = generateNavigationID();
+ listener->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<API::Data> sessionStateData(std::function<bool (WebBackForwardListItem&)>) 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&);
</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&, uint64_t originatingFrameID, const WebCore::ResourceRequest& originalRequest, const WebCore::ResourceRequest&, uint64_t listenerID, IPC::MessageDecoder&, bool& receivedPolicyAction, uint64_t& policyAction, uint64_t& downloadID);
</del><ins>+ void decidePolicyForNavigationAction(uint64_t frameID, uint64_t navigationID, const NavigationActionData&, uint64_t originatingFrameID, const WebCore::ResourceRequest& originalRequest, const WebCore::ResourceRequest&, uint64_t listenerID, IPC::MessageDecoder&, bool& receivedPolicyAction, uint64_t& newNavigationID, uint64_t& policyAction, uint64_t& downloadID);
</ins><span class="cx"> void decidePolicyForNewWindowAction(uint64_t frameID, const NavigationActionData&, const WebCore::ResourceRequest&, const String& frameName, uint64_t listenerID, IPC::MessageDecoder&);
</span><span class="cx"> void decidePolicyForResponse(uint64_t frameID, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, bool canShowMIMEType, uint64_t listenerID, IPC::MessageDecoder&);
</span><span class="cx"> void decidePolicyForResponseSync(uint64_t frameID, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, bool canShowMIMEType, uint64_t listenerID, IPC::MessageDecoder&, bool& receivedPolicyAction, uint64_t& policyAction, uint64_t& 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) -> (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) -> (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) -> (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->size() < sizeof(UInt32))
</span><del>- return;
</del><ins>+ return 0;
</ins><span class="cx">
</span><span class="cx"> const unsigned char* buffer = apiData->bytes();
</span><span class="cx"> UInt32 versionHeader = (buffer[0] << 24) + (buffer[1] << 16) + (buffer[2] << 8) + buffer[3];
</span><span class="cx">
</span><span class="cx"> if (versionHeader != CurrentSessionStateDataVersion) {
</span><span class="cx"> LOG(SessionState, "Unrecognized version header for session state data - cannot restore");
</span><del>- return;
</del><ins>+ return 0;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> RetainPtr<CFDataRef> data = adoptCF(CFDataCreate(0, apiData->bytes() + sizeof(UInt32), apiData->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, "Could not read session state property list");
</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, "SessionState property list is not a CFDictionaryRef (%i) - its CFTypeID is %i", (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->currentItem())
</span><span class="cx"> m_pageLoadState.setPendingAPIRequestURL(transaction, item->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<CFStringRef> autosaveKey(const String& 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->didReceivePolicyDecision(listenerID, static_cast<PolicyAction>(policyAction), downloadID);
</del><ins>+ m_frame->didReceivePolicyDecision(listenerID, static_cast<PolicyAction>(policyAction), 0, downloadID);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction(const NavigationAction& navigationAction, const ResourceRequest& request, PassRefPtr<FormState> formState, const String& frameName, FramePolicyFunction function)
</span><span class="lines">@@ -729,6 +729,7 @@
</span><span class="cx">
</span><span class="cx"> uint64_t listenerID = m_frame->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->canHandleRequest(request);
</span><span class="cx">
</span><ins>+ WebCore::Frame* coreFrame = m_frame->coreFrame();
+ WebDocumentLoader* documentLoader = static_cast<WebDocumentLoader*>(coreFrame->loader().policyDocumentLoader());
+ if (!documentLoader)
+ documentLoader = static_cast<WebDocumentLoader*>(coreFrame->loader().documentLoader());
+
</ins><span class="cx"> // Notify the UIProcess.
</span><del>- if (!webPage->sendSync(Messages::WebPageProxy::DecidePolicyForNavigationAction(m_frame->frameID(), navigationActionData, originatingFrame ? originatingFrame->frameID() : 0, navigationAction.resourceRequest(), request, listenerID, InjectedBundleUserMessageEncoder(userData.get())), Messages::WebPageProxy::DecidePolicyForNavigationAction::Reply(receivedPolicyAction, policyAction, downloadID)))
</del><ins>+ if (!webPage->sendSync(Messages::WebPageProxy::DecidePolicyForNavigationAction(m_frame->frameID(), documentLoader->navigationID(), navigationActionData, originatingFrame ? originatingFrame->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->didReceivePolicyDecision(listenerID, static_cast<PolicyAction>(policyAction), downloadID);
</del><ins>+ m_frame->didReceivePolicyDecision(listenerID, static_cast<PolicyAction>(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 "config.h"
</span><span class="cx"> #include "WebDocumentLoader.h"
</span><span class="cx">
</span><ins>+#include "WebFrame.h"
+
</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())->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&, const WebCore::SubstituteData&);
</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 "WKAPICast.h"
</span><span class="cx"> #include "WKBundleAPICast.h"
</span><span class="cx"> #include "WebChromeClient.h"
</span><ins>+#include "WebDocumentLoader.h"
</ins><span class="cx"> #include "WebPage.h"
</span><span class="cx"> #include "WebPageProxyMessages.h"
</span><span class="cx"> #include "WebProcess.h"
</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& documentLoader = static_cast<WebDocumentLoader&>(*m_coreFrame->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->editor().setBaseWritingDirection(RightToLeftWritingDirection);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void WebFrame::documentLoaderDetached(uint64_t navigationID)
+{
+ page()->send(Messages::WebPageProxy::DidDestroyNavigation(navigationID));
+}
+
</ins><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx"> RetainPtr<CFDataRef> 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&);
</span><span class="cx"> void convertMainResourceLoadToDownload(WebCore::DocumentLoader*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
</span><span class="lines">@@ -131,6 +131,8 @@
</span><span class="cx">
</span><span class="cx"> void setTextDirection(const String&);
</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->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->didReceivePolicyDecision(listenerID, static_cast<PolicyAction>(policyAction), downloadID);
</del><ins>+ frame->didReceivePolicyDecision(listenerID, static_cast<PolicyAction>(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&);
</span><span class="cx"> void updatePreferences(const WebPreferencesStore&);
</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&);
</span><span class="cx"> void setCustomTextEncodingName(const String&);
</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>