<!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>[171219] 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/171219">171219</a></dd>
<dt>Author</dt> <dd>timothy_horton@apple.com</dd>
<dt>Date</dt> <dd>2014-07-18 06:41:06 -0700 (Fri, 18 Jul 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>[WK2] Provide a mechanism to grab the back-forward list for gesture navigation purposes from another WKWebView
https://bugs.webkit.org/show_bug.cgi?id=134999
&lt;rdar://problem/17238025&gt;

Reviewed by Sam Weinig.

In some cases, clients may need to throw a WKWebView with no back-forward list over
another WKWebView, and want to participate in gesture swipe as if they were actually
the page being overlaid.

* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView setAllowsBackForwardNavigationGestures:]):
* UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
(-[WKWebViewConfiguration copyWithZone:]):
(-[WKWebViewConfiguration _alternateWebViewForNavigationGestures]):
(-[WKWebViewConfiguration _setAlternateWebViewForNavigationGestures:]):
* UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
Keep an &quot;alternate&quot; WKWebView &quot;for navigation gestures&quot;, which ViewGestureController
will use as the real source of back-forward items, and the destination of the swipe navigation.
All swipe delegate callbacks will also fire from the alternate view, because it owns the items
and will be doing the navigation.

* UIProcess/ios/ViewGestureControllerIOS.mm:
(WebKit::ViewGestureController::setAlternateBackForwardListSourceView):
(WebKit::ViewGestureController::beginSwipeGesture):
Send navigationGestureDidBegin via the alternate view's WebPageProxy if it exists.
Record a new snapshot on the current page, but copy it to the alternate view if necessary,
so that when swiping forward from the alternate view, it will have the &quot;right&quot; snapshot.
Get the target back forward item from the alternate view.
Send navigationGestureWillEnd via the alternate view's WebPageProxy if it exists.

(WebKit::ViewGestureController::canSwipeInDirection):
Determine if we can swipe in a direction by looking at the alternate view's back-forward list if necessary.

(WebKit::ViewGestureController::endSwipeGesture):
Send navigationGestureDidEnd via the alternate view's WebPageProxy if it exists.
Perform the navigation on the alternate view if necessary.

(WebKit::ViewGestureController::removeSwipeSnapshot):
Send navigationGestureSnapshotWasRemoved via the alternate view's WebPageProxy if it exists.

* UIProcess/mac/ViewGestureController.h:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKWebViewmm">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKWebViewConfigurationmm">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKWebViewConfigurationPrivateh">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessiosViewGestureControllerIOSmm">trunk/Source/WebKit2/UIProcess/ios/ViewGestureControllerIOS.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessmacViewGestureControllerh">trunk/Source/WebKit2/UIProcess/mac/ViewGestureController.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (171218 => 171219)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2014-07-18 09:50:01 UTC (rev 171218)
+++ trunk/Source/WebKit2/ChangeLog        2014-07-18 13:41:06 UTC (rev 171219)
</span><span class="lines">@@ -1,3 +1,48 @@
</span><ins>+2014-07-18  Tim Horton  &lt;timothy_horton@apple.com&gt;
+
+        [WK2] Provide a mechanism to grab the back-forward list for gesture navigation purposes from another WKWebView
+        https://bugs.webkit.org/show_bug.cgi?id=134999
+        &lt;rdar://problem/17238025&gt;
+
+        Reviewed by Sam Weinig.
+
+        In some cases, clients may need to throw a WKWebView with no back-forward list over
+        another WKWebView, and want to participate in gesture swipe as if they were actually
+        the page being overlaid.
+
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView setAllowsBackForwardNavigationGestures:]):
+        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
+        (-[WKWebViewConfiguration copyWithZone:]):
+        (-[WKWebViewConfiguration _alternateWebViewForNavigationGestures]):
+        (-[WKWebViewConfiguration _setAlternateWebViewForNavigationGestures:]):
+        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
+        Keep an &quot;alternate&quot; WKWebView &quot;for navigation gestures&quot;, which ViewGestureController
+        will use as the real source of back-forward items, and the destination of the swipe navigation.
+        All swipe delegate callbacks will also fire from the alternate view, because it owns the items
+        and will be doing the navigation.
+
+        * UIProcess/ios/ViewGestureControllerIOS.mm:
+        (WebKit::ViewGestureController::setAlternateBackForwardListSourceView):
+        (WebKit::ViewGestureController::beginSwipeGesture):
+        Send navigationGestureDidBegin via the alternate view's WebPageProxy if it exists.
+        Record a new snapshot on the current page, but copy it to the alternate view if necessary,
+        so that when swiping forward from the alternate view, it will have the &quot;right&quot; snapshot.
+        Get the target back forward item from the alternate view.
+        Send navigationGestureWillEnd via the alternate view's WebPageProxy if it exists.
+
+        (WebKit::ViewGestureController::canSwipeInDirection):
+        Determine if we can swipe in a direction by looking at the alternate view's back-forward list if necessary.
+
+        (WebKit::ViewGestureController::endSwipeGesture):
+        Send navigationGestureDidEnd via the alternate view's WebPageProxy if it exists.
+        Perform the navigation on the alternate view if necessary.
+
+        (WebKit::ViewGestureController::removeSwipeSnapshot):
+        Send navigationGestureSnapshotWasRemoved via the alternate view's WebPageProxy if it exists.
+
+        * UIProcess/mac/ViewGestureController.h:
+
</ins><span class="cx"> 2014-07-17  David Kilzer  &lt;ddkilzer@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         SECTORDER_FLAGS should be defined in target's xcconfig file, not Base.xcconfig
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKWebViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (171218 => 171219)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm        2014-07-18 09:50:01 UTC (rev 171218)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm        2014-07-18 13:41:06 UTC (rev 171219)
</span><span class="lines">@@ -1481,6 +1481,7 @@
</span><span class="cx">         if (!_gestureController) {
</span><span class="cx">             _gestureController = std::make_unique&lt;WebKit::ViewGestureController&gt;(*_page);
</span><span class="cx">             _gestureController-&gt;installSwipeHandler(self, [self scrollView]);
</span><ins>+            _gestureController-&gt;setAlternateBackForwardListSourceView([_configuration _alternateWebViewForNavigationGestures]);
</ins><span class="cx">         }
</span><span class="cx">     } else
</span><span class="cx">         _gestureController = nullptr;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKWebViewConfigurationmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.mm (171218 => 171219)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.mm        2014-07-18 09:50:01 UTC (rev 171218)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.mm        2014-07-18 13:41:06 UTC (rev 171219)
</span><span class="lines">@@ -73,6 +73,7 @@
</span><span class="cx">     LazyInitialized&lt;_WKVisitedLinkProvider&gt; _visitedLinkProvider;
</span><span class="cx">     LazyInitialized&lt;_WKWebsiteDataStore&gt; _websiteDataStore;
</span><span class="cx">     WebKit::WeakObjCPtr&lt;WKWebView&gt; _relatedWebView;
</span><ins>+    WebKit::WeakObjCPtr&lt;WKWebView&gt; _alternateWebViewForNavigationGestures;
</ins><span class="cx">     RetainPtr&lt;NSString&gt; _groupIdentifier;
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx">     LazyInitialized&lt;WKWebViewContentProviderRegistry&gt; _contentProviderRegistry;
</span><span class="lines">@@ -107,6 +108,7 @@
</span><span class="cx">     configuration._visitedLinkProvider = self._visitedLinkProvider;
</span><span class="cx">     configuration._websiteDataStore = self._websiteDataStore;
</span><span class="cx">     configuration._relatedWebView = _relatedWebView.get().get();
</span><ins>+    configuration._alternateWebViewForNavigationGestures = _alternateWebViewForNavigationGestures.get().get();
</ins><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx">     configuration._contentProviderRegistry = self._contentProviderRegistry;
</span><span class="cx"> #endif
</span><span class="lines">@@ -221,6 +223,16 @@
</span><span class="cx">     _relatedWebView = relatedWebView;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+- (WKWebView *)_alternateWebViewForNavigationGestures
+{
+    return _alternateWebViewForNavigationGestures.getAutoreleased();
+}
+
+- (void)_setAlternateWebViewForNavigationGestures:(WKWebView *)alternateView
+{
+    _alternateWebViewForNavigationGestures = alternateView;
+}
+
</ins><span class="cx"> - (NSString *)_groupIdentifier
</span><span class="cx"> {
</span><span class="cx">     return _groupIdentifier.get();
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKWebViewConfigurationPrivateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h (171218 => 171219)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h        2014-07-18 09:50:01 UTC (rev 171218)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h        2014-07-18 13:41:06 UTC (rev 171219)
</span><span class="lines">@@ -40,6 +40,8 @@
</span><span class="cx"> 
</span><span class="cx"> @property (nonatomic, strong, setter=_setWebsiteDataStore:) _WKWebsiteDataStore *_websiteDataStore;
</span><span class="cx"> 
</span><ins>+@property (nonatomic, weak, setter=_setAlternateWebViewForNavigationGestures:) WKWebView *_alternateWebViewForNavigationGestures;
+
</ins><span class="cx"> @end
</span><span class="cx"> 
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessiosViewGestureControllerIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/ios/ViewGestureControllerIOS.mm (171218 => 171219)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/ios/ViewGestureControllerIOS.mm        2014-07-18 09:50:01 UTC (rev 171218)
+++ trunk/Source/WebKit2/UIProcess/ios/ViewGestureControllerIOS.mm        2014-07-18 13:41:06 UTC (rev 171219)
</span><span class="lines">@@ -31,6 +31,8 @@
</span><span class="cx"> #import &quot;ViewGestureControllerMessages.h&quot;
</span><span class="cx"> #import &quot;ViewGestureGeometryCollectorMessages.h&quot;
</span><span class="cx"> #import &quot;ViewSnapshotStore.h&quot;
</span><ins>+#import &quot;WKBackForwardListItemInternal.h&quot;
+#import &quot;WKWebViewInternal.h&quot;
</ins><span class="cx"> #import &quot;WebBackForwardList.h&quot;
</span><span class="cx"> #import &quot;WebPageGroup.h&quot;
</span><span class="cx"> #import &quot;WebPageMessages.h&quot;
</span><span class="lines">@@ -146,6 +148,11 @@
</span><span class="cx">     viewGestureControllersForAllPages().remove(m_webPageProxy.pageID());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void ViewGestureController::setAlternateBackForwardListSourceView(WKWebView *view)
+{
+    m_alternateBackForwardListSourceView = view;
+}
+
</ins><span class="cx"> void ViewGestureController::installSwipeHandler(UIView *gestureRecognizerView, UIView *swipingView)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(!m_swipeInteractiveTransitionDelegate);
</span><span class="lines">@@ -158,12 +165,21 @@
</span><span class="cx">     if (m_activeGestureType != ViewGestureType::None)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    m_webPageProxy.navigationGestureDidBegin();
</del><ins>+    m_webPageProxyForBackForwardListForCurrentSwipe = m_alternateBackForwardListSourceView.get() ? m_alternateBackForwardListSourceView.get()-&gt;_page : &amp;m_webPageProxy;
</ins><span class="cx"> 
</span><del>-    ViewSnapshotStore::shared().recordSnapshot(m_webPageProxy);
</del><ins>+    m_webPageProxyForBackForwardListForCurrentSwipe-&gt;navigationGestureDidBegin();
</ins><span class="cx"> 
</span><del>-    WebKit::WebBackForwardListItem* targetItem = direction == SwipeDirection::Left ? m_webPageProxy.backForwardList().backItem() : m_webPageProxy.backForwardList().forwardItem();
</del><ins>+    m_webPageProxy.recordNavigationSnapshot();
</ins><span class="cx"> 
</span><ins>+    auto backForwardList = m_webPageProxyForBackForwardListForCurrentSwipe-&gt;backForwardList();
+
+    // Copy the snapshot from this view to the one that owns the back forward list, so that
+    // swiping forward will have the correct snapshot.
+    if (m_webPageProxyForBackForwardListForCurrentSwipe != &amp;m_webPageProxy)
+        backForwardList.currentItem()-&gt;setSnapshot(m_webPageProxy.backForwardList().currentItem()-&gt;snapshot());
+
+    WebBackForwardListItem* targetItem = direction == SwipeDirection::Left ? backForwardList.backItem() : backForwardList.forwardItem();
+
</ins><span class="cx">     CGRect liveSwipeViewFrame = [m_liveSwipeView frame];
</span><span class="cx"> 
</span><span class="cx">     RetainPtr&lt;UIViewController&gt; snapshotViewController = adoptNS([[UIViewController alloc] init]);
</span><span class="lines">@@ -213,7 +229,7 @@
</span><span class="cx">     [transitionContext _setTransitionIsInFlight:YES];
</span><span class="cx">     [transitionContext _setInteractiveUpdateHandler:^(BOOL finish, CGFloat percent, BOOL transitionCompleted, _UIViewControllerTransitionContext *) {
</span><span class="cx">         if (finish)
</span><del>-            m_webPageProxy.navigationGestureWillEnd(transitionCompleted, *targetItem);
</del><ins>+            m_webPageProxyForBackForwardListForCurrentSwipe-&gt;navigationGestureWillEnd(transitionCompleted, *targetItem);
</ins><span class="cx">     }];
</span><span class="cx">     [transitionContext _setCompletionHandler:^(_UIViewControllerTransitionContext *context, BOOL didComplete) { endSwipeGesture(targetItem, context, !didComplete); }];
</span><span class="cx">     [transitionContext _setInteractiveUpdateHandler:^(BOOL, CGFloat, BOOL, _UIViewControllerTransitionContext *) { }];
</span><span class="lines">@@ -226,9 +242,10 @@
</span><span class="cx"> 
</span><span class="cx"> bool ViewGestureController::canSwipeInDirection(SwipeDirection direction)
</span><span class="cx"> {
</span><ins>+    auto backForwardList = m_alternateBackForwardListSourceView.get() ? m_alternateBackForwardListSourceView.get()-&gt;_page-&gt;backForwardList() : m_webPageProxy.backForwardList();
</ins><span class="cx">     if (direction == SwipeDirection::Left)
</span><del>-        return !!m_webPageProxy.backForwardList().backItem();
-    return !!m_webPageProxy.backForwardList().forwardItem();
</del><ins>+        return !!backForwardList.backItem();
+    return !!backForwardList.forwardItem();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ViewGestureController::endSwipeGesture(WebBackForwardListItem* targetItem, _UIViewControllerTransitionContext *context, bool cancelled)
</span><span class="lines">@@ -243,10 +260,12 @@
</span><span class="cx">     m_liveSwipeViewClippingView = nullptr;
</span><span class="cx">     [m_transitionContainerView removeFromSuperview];
</span><span class="cx">     m_transitionContainerView = nullptr;
</span><del>-    
</del><ins>+
</ins><span class="cx">     if (cancelled) {
</span><ins>+        // removeSwipeSnapshot will clear m_webPageProxyForBackForwardListForCurrentSwipe, so hold on to it here.
+        RefPtr&lt;WebPageProxy&gt; webPageProxyForBackForwardListForCurrentSwipe = m_webPageProxyForBackForwardListForCurrentSwipe;
</ins><span class="cx">         removeSwipeSnapshot();
</span><del>-        m_webPageProxy.navigationGestureDidEnd(false, *targetItem);
</del><ins>+        webPageProxyForBackForwardListForCurrentSwipe-&gt;navigationGestureDidEnd(false, *targetItem);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -259,8 +278,9 @@
</span><span class="cx">     // displaying the destination item's snapshot.
</span><span class="cx">     ViewSnapshotStore::shared().disableSnapshotting();
</span><span class="cx"> 
</span><del>-    m_webPageProxy.navigationGestureDidEnd(true, *targetItem);
-    m_webPageProxy.goToBackForwardItem(targetItem);
</del><ins>+    m_webPageProxyForBackForwardListForCurrentSwipe-&gt;navigationGestureDidEnd(true, *targetItem);
+    m_webPageProxyForBackForwardListForCurrentSwipe-&gt;goToBackForwardItem(targetItem);
+
</ins><span class="cx">     ViewSnapshotStore::shared().enableSnapshotting();
</span><span class="cx"> 
</span><span class="cx">     uint64_t pageID = m_webPageProxy.pageID();
</span><span class="lines">@@ -324,7 +344,8 @@
</span><span class="cx">     m_snapshotRemovalTargetRenderTreeSize = 0;
</span><span class="cx">     m_activeGestureType = ViewGestureType::None;
</span><span class="cx"> 
</span><del>-    m_webPageProxy.navigationGestureSnapshotWasRemoved();
</del><ins>+    m_webPageProxyForBackForwardListForCurrentSwipe-&gt;navigationGestureSnapshotWasRemoved();
+    m_webPageProxyForBackForwardListForCurrentSwipe = nullptr;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessmacViewGestureControllerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/mac/ViewGestureController.h (171218 => 171219)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/mac/ViewGestureController.h        2014-07-18 09:50:01 UTC (rev 171218)
+++ trunk/Source/WebKit2/UIProcess/mac/ViewGestureController.h        2014-07-18 13:41:06 UTC (rev 171219)
</span><span class="lines">@@ -27,6 +27,7 @@
</span><span class="cx"> #define ViewGestureController_h
</span><span class="cx"> 
</span><span class="cx"> #include &quot;MessageReceiver.h&quot;
</span><ins>+#include &quot;WeakObjCPtr.h&quot;
</ins><span class="cx"> #include &lt;WebCore/FloatRect.h&gt;
</span><span class="cx"> #include &lt;WebCore/Timer.h&gt;
</span><span class="cx"> #include &lt;wtf/RetainPtr.h&gt;
</span><span class="lines">@@ -36,6 +37,7 @@
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx"> OBJC_CLASS UIView;
</span><span class="cx"> OBJC_CLASS WKSwipeTransitionController;
</span><ins>+OBJC_CLASS WKWebView;
</ins><span class="cx"> OBJC_CLASS _UIViewControllerTransitionContext;
</span><span class="cx"> OBJC_CLASS _UINavigationInteractiveTransitionBase;
</span><span class="cx"> #else
</span><span class="lines">@@ -104,6 +106,7 @@
</span><span class="cx">     void setShouldIgnorePinnedState(bool ignore) { m_shouldIgnorePinnedState = ignore; }
</span><span class="cx"> #else
</span><span class="cx">     void installSwipeHandler(UIView *gestureRecognizerView, UIView *swipingView);
</span><ins>+    void setAlternateBackForwardListSourceView(WKWebView *);
</ins><span class="cx">     bool canSwipeInDirection(SwipeDirection);
</span><span class="cx">     void beginSwipeGesture(_UINavigationInteractiveTransitionBase *, SwipeDirection);
</span><span class="cx">     void endSwipeGesture(WebBackForwardListItem* targetItem, _UIViewControllerTransitionContext *, bool cancelled);
</span><span class="lines">@@ -139,7 +142,7 @@
</span><span class="cx">     CALayer *determineLayerAdjacentToSnapshotForParent(SwipeDirection, CALayer *snapshotLayerParent) const;
</span><span class="cx">     void applyDebuggingPropertiesToSwipeViews();
</span><span class="cx"> #endif
</span><del>-    
</del><ins>+
</ins><span class="cx">     WebPageProxy&amp; m_webPageProxy;
</span><span class="cx">     ViewGestureType m_activeGestureType;
</span><span class="cx">     
</span><span class="lines">@@ -186,6 +189,8 @@
</span><span class="cx">     RetainPtr&lt;WKSwipeTransitionController&gt; m_swipeInteractiveTransitionDelegate;
</span><span class="cx">     uint64_t m_snapshotRemovalTargetRenderTreeSize;
</span><span class="cx">     bool m_shouldRemoveSnapshotWhenTargetRenderTreeSizeHit;
</span><ins>+    WeakObjCPtr&lt;WKWebView&gt; m_alternateBackForwardListSourceView;
+    RefPtr&lt;WebPageProxy&gt; m_webPageProxyForBackForwardListForCurrentSwipe;
</ins><span class="cx"> #endif
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>