Diff
Modified: trunk/Source/WebCore/ChangeLog (199232 => 199233)
--- trunk/Source/WebCore/ChangeLog 2016-04-08 17:21:32 UTC (rev 199232)
+++ trunk/Source/WebCore/ChangeLog 2016-04-08 17:22:19 UTC (rev 199233)
@@ -1,3 +1,31 @@
+2016-04-07 Simon Fraser <simon.fra...@apple.com>
+
+ [iOS WK2] Stop using exposedContentRect for history scroll state restoration
+ https://bugs.webkit.org/show_bug.cgi?id=156392
+
+ Reviewed by Tim Horton.
+
+ A future commit will alter the meaning of exposedContentRect on iOS to take into
+ account clipped out parts of the WKWebView. To achieve this, wean history restoration
+ off of using exposedContentRect for scroll state restoration. It did this to restore
+ the page to the same position relative to the view's top-left (to avoid jiggles caused
+ by changing obscured insets).
+
+ Do this by pushing the left/top obscured insets down with visible content rects updates,
+ storing them on ScrollView, and adding them to HistoryItem. Those insets are then used
+ for scroll state restoration in WKWebView.
+
+ * history/HistoryItem.cpp:
+ (WebCore::HistoryItem::HistoryItem):
+ * history/HistoryItem.h:
+ (WebCore::HistoryItem::obscuredInset):
+ (WebCore::HistoryItem::setObscuredInset):
+ * loader/HistoryController.cpp:
+ (WebCore::HistoryController::saveScrollPositionAndViewStateToItem):
+ * platform/ScrollView.h:
+ (WebCore::ScrollView::platformObscuredInset):
+ (WebCore::ScrollView::platformSetObscuredInset):
+
2016-04-08 Brady Eidson <beid...@apple.com>
Build fix followup to http://trac.webkit.org/changeset/199230
Modified: trunk/Source/WebCore/history/HistoryItem.cpp (199232 => 199233)
--- trunk/Source/WebCore/history/HistoryItem.cpp 2016-04-08 17:21:32 UTC (rev 199232)
+++ trunk/Source/WebCore/history/HistoryItem.cpp 2016-04-08 17:22:19 UTC (rev 199233)
@@ -62,11 +62,6 @@
, m_itemSequenceNumber(generateSequenceNumber())
, m_documentSequenceNumber(generateSequenceNumber())
, m_pruningReason(PruningReason::None)
-#if PLATFORM(IOS)
- , m_scale(0)
- , m_scaleIsInitial(false)
- , m_bookmarkID(0)
-#endif
{
}
@@ -80,12 +75,7 @@
, m_itemSequenceNumber(generateSequenceNumber())
, m_documentSequenceNumber(generateSequenceNumber())
, m_pruningReason(PruningReason::None)
-#if PLATFORM(IOS)
- , m_scale(0)
- , m_scaleIsInitial(false)
- , m_bookmarkID(0)
-#endif
-{
+{
iconDatabase().retainIconForPageURL(m_urlString);
}
@@ -100,11 +90,6 @@
, m_itemSequenceNumber(generateSequenceNumber())
, m_documentSequenceNumber(generateSequenceNumber())
, m_pruningReason(PruningReason::None)
-#if PLATFORM(IOS)
- , m_scale(0)
- , m_scaleIsInitial(false)
- , m_bookmarkID(0)
-#endif
{
iconDatabase().retainIconForPageURL(m_urlString);
}
@@ -132,6 +117,7 @@
, m_formContentType(item.m_formContentType)
, m_pruningReason(PruningReason::None)
#if PLATFORM(IOS)
+ , m_obscuredInset(item.m_obscuredInset)
, m_scale(item.m_scale)
, m_scaleIsInitial(item.m_scaleIsInitial)
, m_bookmarkID(item.m_bookmarkID)
Modified: trunk/Source/WebCore/history/HistoryItem.h (199232 => 199233)
--- trunk/Source/WebCore/history/HistoryItem.h 2016-04-08 17:21:32 UTC (rev 199232)
+++ trunk/Source/WebCore/history/HistoryItem.h 2016-04-08 17:22:19 UTC (rev 199233)
@@ -179,6 +179,9 @@
IntRect unobscuredContentRect() const { return m_unobscuredContentRect; }
void setUnobscuredContentRect(IntRect unobscuredContentRect) { m_unobscuredContentRect = unobscuredContentRect; }
+ FloatSize obscuredInset() const { return m_obscuredInset; }
+ void setObscuredInset(const FloatSize& inset) { m_obscuredInset = inset; }
+
FloatSize minimumLayoutSizeInScrollViewCoordinates() const { return m_minimumLayoutSizeInScrollViewCoordinates; }
void setMinimumLayoutSizeInScrollViewCoordinates(FloatSize minimumLayoutSizeInScrollViewCoordinates) { m_minimumLayoutSizeInScrollViewCoordinates = minimumLayoutSizeInScrollViewCoordinates; }
@@ -265,11 +268,12 @@
IntRect m_unobscuredContentRect;
FloatSize m_minimumLayoutSizeInScrollViewCoordinates;
IntSize m_contentSize;
- float m_scale;
- bool m_scaleIsInitial;
+ FloatSize m_obscuredInset;
+ float m_scale { 1 };
+ bool m_scaleIsInitial { false };
ViewportArguments m_viewportArguments;
- uint32_t m_bookmarkID;
+ uint32_t m_bookmarkID { 0 };
String m_sharedLinkUniqueIdentifier;
#endif
Modified: trunk/Source/WebCore/loader/HistoryController.cpp (199232 => 199233)
--- trunk/Source/WebCore/loader/HistoryController.cpp 2016-04-08 17:21:32 UTC (rev 199232)
+++ trunk/Source/WebCore/loader/HistoryController.cpp 2016-04-08 17:22:19 UTC (rev 199233)
@@ -82,6 +82,7 @@
#if PLATFORM(IOS)
item->setExposedContentRect(frameView->exposedContentRect());
item->setUnobscuredContentRect(frameView->unobscuredContentRect());
+ item->setObscuredInset(frameView->platformObscuredInset());
#endif
Page* page = m_frame.page();
Modified: trunk/Source/WebCore/platform/ScrollView.h (199232 => 199233)
--- trunk/Source/WebCore/platform/ScrollView.h 2016-04-08 17:21:32 UTC (rev 199232)
+++ trunk/Source/WebCore/platform/ScrollView.h 2016-04-08 17:22:19 UTC (rev 199233)
@@ -378,6 +378,11 @@
WEBCORE_EXPORT void scrollOffsetChangedViaPlatformWidget(const ScrollOffset& oldOffset, const ScrollOffset& newOffset);
+#if PLATFORM(IOS)
+ FloatSize platformObscuredInset() const { return m_obscuredInset; }
+ void platformSetObscuredInset(FloatSize inset) { m_obscuredInset = inset; }
+#endif
+
protected:
ScrollView();
@@ -447,11 +452,13 @@
// whether it is safe to blit on scroll.
bool m_canBlitOnScroll;
+#if PLATFORM(IOS)
// FIXME: exposedContentRect is a very similar concept to fixedVisibleContentRect except it does not differentiate
// between exposed and unobscured areas. The two attributes should eventually be merged.
-#if PLATFORM(IOS)
FloatRect m_exposedContentRect;
FloatSize m_unobscuredContentSize;
+ // This is only used for history scroll position restoration.
+ FloatSize m_obscuredInset;
#else
IntRect m_fixedVisibleContentRect;
#endif
Modified: trunk/Source/WebKit2/ChangeLog (199232 => 199233)
--- trunk/Source/WebKit2/ChangeLog 2016-04-08 17:21:32 UTC (rev 199232)
+++ trunk/Source/WebKit2/ChangeLog 2016-04-08 17:22:19 UTC (rev 199233)
@@ -1,3 +1,55 @@
+2016-04-07 Simon Fraser <simon.fra...@apple.com>
+
+ [iOS WK2] Stop using exposedContentRect for history scroll state restoration
+ https://bugs.webkit.org/show_bug.cgi?id=156392
+
+ Reviewed by Tim Horton.
+
+ A future commit will alter the meaning of exposedContentRect on iOS to take into
+ account clipped out parts of the WKWebView. To achieve this, wean history restoration
+ off of using exposedContentRect for scroll state restoration. It did this to restore
+ the page to the same position relative to the view's top-left (to avoid jiggles caused
+ by changing obscured insets).
+
+ Do this by pushing the left/top obscured insets down with visible content rects updates,
+ storing them on ScrollView, and adding them to HistoryItem. Those insets are then used
+ for scroll state restoration in WKWebView.
+
+ * Shared/VisibleContentRectUpdateInfo.cpp: Add FloatSize for obscuredInset.
+ (WebKit::VisibleContentRectUpdateInfo::encode):
+ (WebKit::VisibleContentRectUpdateInfo::decode):
+ * Shared/VisibleContentRectUpdateInfo.h:
+ (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
+ (WebKit::VisibleContentRectUpdateInfo::obscuredInset):
+ (WebKit::operator==):
+ * UIProcess/API/Cocoa/WKWebView.mm:
+ (-[WKWebView _processDidExit]): Rename _needsToRestoreExposedRect to _needsToRestoreScrollPosition
+ (-[WKWebView _didCommitLayerTree:]): Restore the scroll position using the scaled scrollOffset minus
+ the old obscuredInset.
+ (-[WKWebView _layerTreeCommitComplete]):
+ (-[WKWebView _restorePageScrollPosition:scrollOrigin:previousObscuredInset:scale:]):
+ (-[WKWebView _restorePageStateToUnobscuredCenter:scale:]):
+ (-[WKWebView _scrollToContentScrollPosition:scrollOrigin:]):
+ (-[WKWebView _updateVisibleContentRects]):
+ (-[WKWebView _restorePageStateToExposedRect:scrollOrigin:scale:]): Deleted.
+ * UIProcess/API/Cocoa/WKWebViewInternal.h:
+ * UIProcess/PageClient.h:
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/WebPageProxy.messages.in:
+ * UIProcess/ios/PageClientImplIOS.h:
+ * UIProcess/ios/PageClientImplIOS.mm:
+ (WebKit::PageClientImpl::restorePageState):
+ * UIProcess/ios/WKContentView.h:
+ * UIProcess/ios/WKContentView.mm:
+ (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInset:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:]):
+ (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:]): Deleted.
+ * UIProcess/ios/WebPageProxyIOS.mm:
+ (WebKit::WebPageProxy::updateVisibleContentRects):
+ (WebKit::WebPageProxy::restorePageState):
+ * WebProcess/WebPage/ios/WebPageIOS.mm:
+ (WebKit::WebPage::restorePageState):
+ (WebKit::WebPage::updateVisibleContentRects):
+
2016-04-08 Brady Eidson <beid...@apple.com>
Modern IDB (Blob support): Write blobs to temporary files and move them to the correct location when storing them.
Modified: trunk/Source/WebKit2/Shared/VisibleContentRectUpdateInfo.cpp (199232 => 199233)
--- trunk/Source/WebKit2/Shared/VisibleContentRectUpdateInfo.cpp 2016-04-08 17:21:32 UTC (rev 199232)
+++ trunk/Source/WebKit2/Shared/VisibleContentRectUpdateInfo.cpp 2016-04-08 17:22:19 UTC (rev 199233)
@@ -36,6 +36,7 @@
encoder << m_unobscuredContentRect;
encoder << m_unobscuredRectInScrollViewCoordinates;
encoder << m_customFixedPositionRect;
+ encoder << m_obscuredInset;
encoder << m_lastLayerTreeTransactionID;
encoder << m_scale;
encoder << m_timestamp;
@@ -57,6 +58,8 @@
return false;
if (!decoder.decode(result.m_customFixedPositionRect))
return false;
+ if (!decoder.decode(result.m_obscuredInset))
+ return false;
if (!decoder.decode(result.m_lastLayerTreeTransactionID))
return false;
if (!decoder.decode(result.m_scale))
Modified: trunk/Source/WebKit2/Shared/VisibleContentRectUpdateInfo.h (199232 => 199233)
--- trunk/Source/WebKit2/Shared/VisibleContentRectUpdateInfo.h 2016-04-08 17:21:32 UTC (rev 199232)
+++ trunk/Source/WebKit2/Shared/VisibleContentRectUpdateInfo.h 2016-04-08 17:22:19 UTC (rev 199233)
@@ -39,11 +39,15 @@
public:
VisibleContentRectUpdateInfo() = default;
- VisibleContentRectUpdateInfo(const WebCore::FloatRect& exposedContentRect, const WebCore::FloatRect& unobscuredContentRect, const WebCore::FloatRect& unobscuredRectInScrollViewCoordinates, const WebCore::FloatRect& customFixedPositionRect, double scale, bool inStableState, bool isChangingObscuredInsetsInteractively, bool allowShrinkToFit, double timestamp, double horizontalVelocity, double verticalVelocity, double scaleChangeRate, uint64_t lastLayerTreeTransactionId)
+ VisibleContentRectUpdateInfo(const WebCore::FloatRect& exposedContentRect, const WebCore::FloatRect& unobscuredContentRect,
+ const WebCore::FloatRect& unobscuredRectInScrollViewCoordinates, const WebCore::FloatRect& customFixedPositionRect,
+ const WebCore::FloatSize& obscuredInset, double scale, bool inStableState, bool isChangingObscuredInsetsInteractively, bool allowShrinkToFit,
+ double timestamp, double horizontalVelocity, double verticalVelocity, double scaleChangeRate, uint64_t lastLayerTreeTransactionId)
: m_exposedContentRect(exposedContentRect)
, m_unobscuredContentRect(unobscuredContentRect)
, m_unobscuredRectInScrollViewCoordinates(unobscuredRectInScrollViewCoordinates)
, m_customFixedPositionRect(customFixedPositionRect)
+ , m_obscuredInset(obscuredInset)
, m_lastLayerTreeTransactionID(lastLayerTreeTransactionId)
, m_scale(scale)
, m_timestamp(timestamp)
@@ -60,6 +64,8 @@
const WebCore::FloatRect& unobscuredContentRect() const { return m_unobscuredContentRect; }
const WebCore::FloatRect& unobscuredRectInScrollViewCoordinates() const { return m_unobscuredRectInScrollViewCoordinates; }
const WebCore::FloatRect& customFixedPositionRect() const { return m_customFixedPositionRect; }
+ const WebCore::FloatSize obscuredInset() const { return m_obscuredInset; }
+
double scale() const { return m_scale; }
bool inStableState() const { return m_inStableState; }
bool isChangingObscuredInsetsInteractively() const { return m_isChangingObscuredInsetsInteractively; }
@@ -80,6 +86,7 @@
WebCore::FloatRect m_unobscuredContentRect;
WebCore::FloatRect m_unobscuredRectInScrollViewCoordinates;
WebCore::FloatRect m_customFixedPositionRect;
+ WebCore::FloatSize m_obscuredInset;
uint64_t m_lastLayerTreeTransactionID { 0 };
double m_scale { -1 };
double m_timestamp { 0 };
@@ -98,6 +105,7 @@
&& a.exposedContentRect() == b.exposedContentRect()
&& a.unobscuredContentRect() == b.unobscuredContentRect()
&& a.customFixedPositionRect() == b.customFixedPositionRect()
+ && a.obscuredInset() == b.obscuredInset()
&& a.horizontalVelocity() == b.horizontalVelocity()
&& a.verticalVelocity() == b.verticalVelocity()
&& a.scaleChangeRate() == b.scaleChangeRate()
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (199232 => 199233)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm 2016-04-08 17:21:32 UTC (rev 199232)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm 2016-04-08 17:22:19 UTC (rev 199233)
@@ -224,9 +224,11 @@
Optional<CGRect> _frozenVisibleContentRect;
Optional<CGRect> _frozenUnobscuredContentRect;
- BOOL _needsToRestoreExposedRect;
- BOOL _commitDidRestoreExposedRect;
- WebCore::FloatRect _exposedRectToRestore;
+ BOOL _needsToRestoreScrollPosition;
+ BOOL _commitDidRestoreScrollPosition;
+ WebCore::FloatPoint _scrollOffsetToRestore;
+ WebCore::FloatSize _obscuredInsetWhenSaved;
+
BOOL _needsToRestoreUnobscuredCenter;
WebCore::FloatPoint _unobscuredCenterToRestore;
uint64_t _firstTransactionIDAfterPageRestore;
@@ -1112,7 +1114,7 @@
_needsResetViewStateAfterCommitLoadForMainFrame = NO;
_dynamicViewportUpdateMode = DynamicViewportUpdateMode::NotResizing;
[_contentView setHidden:NO];
- _needsToRestoreExposedRect = NO;
+ _needsToRestoreScrollPosition = NO;
_needsToRestoreUnobscuredCenter = NO;
_scrollViewBackgroundColor = WebCore::Color();
_delayUpdateVisibleContentRects = NO;
@@ -1211,15 +1213,17 @@
bool isTransactionAfterPageRestore = layerTreeTransaction.transactionID() >= _firstTransactionIDAfterPageRestore;
- if (_needsToRestoreExposedRect && isTransactionAfterPageRestore) {
- _needsToRestoreExposedRect = NO;
+ if (_needsToRestoreScrollPosition && isTransactionAfterPageRestore) {
+ _needsToRestoreScrollPosition = NO;
if (areEssentiallyEqualAsFloat(contentZoomScale(self), _scaleToRestore)) {
- WebCore::FloatPoint exposedPosition = _exposedRectToRestore.location();
- exposedPosition.scale(_scaleToRestore, _scaleToRestore);
+ WebCore::FloatPoint scaledScrollOffset = _scrollOffsetToRestore;
+ scaledScrollOffset.scale(_scaleToRestore, _scaleToRestore);
+ WebCore::FloatPoint contentOffsetInScrollViewCoordinates = scaledScrollOffset - _obscuredInsetWhenSaved;
- changeContentOffsetBoundedInValidRange(_scrollView.get(), exposedPosition);
- _commitDidRestoreExposedRect = YES;
+ changeContentOffsetBoundedInValidRange(_scrollView.get(), contentOffsetInScrollViewCoordinates);
+ _commitDidRestoreScrollPosition = YES;
+
if (_gestureController)
_gestureController->didRestoreScrollPosition();
}
@@ -1250,7 +1254,7 @@
- (void)_layerTreeCommitComplete
{
- _commitDidRestoreExposedRect = NO;
+ _commitDidRestoreScrollPosition = NO;
}
- (void)_dynamicViewportUpdateChangedTargetToScale:(double)newScale position:(CGPoint)newScrollPosition nextValidLayerTreeTransactionID:(uint64_t)nextValidLayerTreeTransactionID
@@ -1280,7 +1284,7 @@
_gestureController->didRestoreScrollPosition();
}
-- (void)_restorePageStateToExposedRect:(WebCore::FloatRect)exposedRect scrollOrigin:(WebCore::IntPoint)scrollOrigin scale:(double)scale
+- (void)_restorePageScrollPosition:(WebCore::FloatPoint)scrollPosition scrollOrigin:(WebCore::FloatPoint)scrollOrigin previousObscuredInset:(WebCore::FloatSize)obscuredInset scale:(double)scale
{
if (_dynamicViewportUpdateMode != DynamicViewportUpdateMode::NotResizing)
return;
@@ -1289,12 +1293,11 @@
return;
_needsToRestoreUnobscuredCenter = NO;
- _needsToRestoreExposedRect = YES;
+ _needsToRestoreScrollPosition = YES;
_firstTransactionIDAfterPageRestore = downcast<WebKit::RemoteLayerTreeDrawingAreaProxy>(*_page->drawingArea()).nextLayerTreeTransactionID();
- // Move the exposed rect into scrollView coordinates.
- exposedRect.move(toFloatSize(scrollOrigin));
- _exposedRectToRestore = exposedRect;
+ _scrollOffsetToRestore = WebCore::ScrollableArea::scrollOffsetFromPosition(WebCore::FloatPoint(scrollPosition), WebCore::toFloatSize(scrollOrigin));
+ _obscuredInsetWhenSaved = obscuredInset;
_scaleToRestore = scale;
}
@@ -1306,7 +1309,7 @@
if (_customContentView)
return;
- _needsToRestoreExposedRect = NO;
+ _needsToRestoreScrollPosition = NO;
_needsToRestoreUnobscuredCenter = YES;
_firstTransactionIDAfterPageRestore = downcast<WebKit::RemoteLayerTreeDrawingAreaProxy>(*_page->drawingArea()).nextLayerTreeTransactionID();
_unobscuredCenterToRestore = center;
@@ -1405,7 +1408,7 @@
- (void)_scrollToContentScrollPosition:(WebCore::FloatPoint)scrollPosition scrollOrigin:(WebCore::IntPoint)scrollOrigin
{
- if (_commitDidRestoreExposedRect || _dynamicViewportUpdateMode != DynamicViewportUpdateMode::NotResizing)
+ if (_commitDidRestoreScrollPosition || _dynamicViewportUpdateMode != DynamicViewportUpdateMode::NotResizing)
return;
WebCore::FloatPoint contentOffset = WebCore::ScrollableArea::scrollOffsetFromPosition(scrollPosition, toFloatSize(scrollOrigin));
@@ -1931,6 +1934,7 @@
[_contentView didUpdateVisibleRect:visibleRectInContentCoordinates
unobscuredRect:unobscuredRectInContentCoordinates
unobscuredRectInScrollViewCoordinates:unobscuredRect
+ obscuredInset:CGSizeMake(_obscuredInsets.left, _obscuredInsets.top)
scale:scaleFactor minimumScale:[_scrollView minimumZoomScale]
inStableState:isStableState
isChangingObscuredInsetsInteractively:_isChangingObscuredInsetsInteractively];
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewInternal.h (199232 => 199233)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewInternal.h 2016-04-08 17:21:32 UTC (rev 199232)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewInternal.h 2016-04-08 17:22:19 UTC (rev 199233)
@@ -79,7 +79,7 @@
- (void)_dynamicViewportUpdateChangedTargetToScale:(double)newScale position:(CGPoint)newScrollPosition nextValidLayerTreeTransactionID:(uint64_t)nextValidLayerTreeTransactionID;
- (void)_couldNotRestorePageState;
-- (void)_restorePageStateToExposedRect:(WebCore::FloatRect)exposedRect scrollOrigin:(WebCore::IntPoint)scrollOrigin scale:(double)scale;
+- (void)_restorePageScrollPosition:(WebCore::FloatPoint)scrollPosition scrollOrigin:(WebCore::FloatPoint)scrollOrigin previousObscuredInset:(WebCore::FloatSize)topInset scale:(double)scale;
- (void)_restorePageStateToUnobscuredCenter:(WebCore::FloatPoint)center scale:(double)scale; // FIXME: needs scroll origin?
- (PassRefPtr<WebKit::ViewSnapshot>)_takeViewSnapshot;
Modified: trunk/Source/WebKit2/UIProcess/PageClient.h (199232 => 199233)
--- trunk/Source/WebKit2/UIProcess/PageClient.h 2016-04-08 17:21:32 UTC (rev 199232)
+++ trunk/Source/WebKit2/UIProcess/PageClient.h 2016-04-08 17:22:19 UTC (rev 199233)
@@ -285,8 +285,8 @@
virtual void dynamicViewportUpdateChangedTarget(double newScale, const WebCore::FloatPoint& newScrollPosition, uint64_t transactionID) = 0;
virtual void couldNotRestorePageState() = 0;
- virtual void restorePageState(const WebCore::FloatRect& exposedContentRect, const WebCore::IntPoint& scrollOrigin, double scale) = 0;
- virtual void restorePageCenterAndScale(const WebCore::FloatPoint&, double) = 0;
+ virtual void restorePageState(const WebCore::FloatPoint& scrollPosition, const WebCore::FloatPoint& scrollOrigin, const WebCore::FloatSize& obscuredInsetOnSave, double scale) = 0;
+ virtual void restorePageCenterAndScale(const WebCore::FloatPoint& center, double scale) = 0;
virtual void startAssistingNode(const AssistedNodeInformation&, bool userIsInteracting, bool blurPreviousNode, API::Object* userData) = 0;
virtual void stopAssistingNode() = 0;
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (199232 => 199233)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2016-04-08 17:21:32 UTC (rev 199232)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2016-04-08 17:22:19 UTC (rev 199233)
@@ -452,7 +452,7 @@
const WebCore::FloatRect& exposedContentRect() const { return m_lastVisibleContentRectUpdate.exposedContentRect(); }
const WebCore::FloatRect& unobscuredContentRect() const { return m_lastVisibleContentRectUpdate.unobscuredContentRect(); }
- void updateVisibleContentRects(const WebCore::FloatRect& exposedRect, const WebCore::FloatRect& unobscuredRect, const WebCore::FloatRect& unobscuredRectInScrollViewCoordinates, const WebCore::FloatRect& customFixedPositionRect, double scale, bool inStableState, bool isChangingObscuredInsetsInteractively, bool allowShrinkToFit, double timestamp, double horizontalVelocity, double verticalVelocity, double scaleChangeRate);
+ void updateVisibleContentRects(const WebCore::FloatRect& exposedRect, const WebCore::FloatRect& unobscuredRect, const WebCore::FloatRect& unobscuredRectInScrollViewCoordinates, const WebCore::FloatRect& customFixedPositionRect, const WebCore::FloatSize& obscuredInset, double scale, bool inStableState, bool isChangingObscuredInsetsInteractively, bool allowShrinkToFit, double timestamp, double horizontalVelocity, double verticalVelocity, double scaleChangeRate);
void resendLastVisibleContentRects();
enum class UnobscuredRectConstraint { ConstrainedToDocumentRect, Unconstrained };
@@ -1410,7 +1410,7 @@
void dynamicViewportUpdateChangedTarget(double newTargetScale, const WebCore::FloatPoint& newScrollPosition, uint64_t dynamicViewportSizeUpdateID);
void couldNotRestorePageState();
- void restorePageState(const WebCore::FloatRect& exposedContentRect, const WebCore::IntPoint& scrollOrigin, double scale);
+ void restorePageState(const WebCore::FloatPoint& scrollPosition, const WebCore::FloatPoint& scrollOrigin, const WebCore::FloatSize& obscuredInsetOnSave, double scale);
void restorePageCenterAndScale(const WebCore::FloatPoint&, double scale);
void didGetTapHighlightGeometries(uint64_t requestID, const WebCore::Color& color, const Vector<WebCore::FloatQuad>& geometries, const WebCore::IntSize& topLeftRadius, const WebCore::IntSize& topRightRadius, const WebCore::IntSize& bottomLeftRadius, const WebCore::IntSize& bottomRightRadius);
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in (199232 => 199233)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in 2016-04-08 17:21:32 UTC (rev 199232)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in 2016-04-08 17:22:19 UTC (rev 199233)
@@ -358,7 +358,7 @@
#if PLATFORM(IOS)
DynamicViewportUpdateChangedTarget(double newTargetScale, WebCore::FloatPoint newScrollPosition, uint64_t dynamicViewportSizeUpdateID)
CouldNotRestorePageState()
- RestorePageState(WebCore::FloatRect exposedContentRect, WebCore::IntPoint scrollOrigin, double scale)
+ RestorePageState(WebCore::FloatPoint scrollPosition, WebCore::FloatPoint scrollOrigin, WebCore::FloatSize obscuredInsetOnSave, double scale)
RestorePageCenterAndScale(WebCore::FloatPoint unobscuredCenter, double scale)
DidGetTapHighlightGeometries(uint64_t requestID, WebCore::Color color, Vector<WebCore::FloatQuad> geometries, WebCore::IntSize topLeftRadius, WebCore::IntSize topRightRadius, WebCore::IntSize bottomLeftRadius, WebCore::IntSize bottomRightRadius)
Modified: trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h (199232 => 199233)
--- trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h 2016-04-08 17:21:32 UTC (rev 199232)
+++ trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h 2016-04-08 17:22:19 UTC (rev 199233)
@@ -119,7 +119,7 @@
void dynamicViewportUpdateChangedTarget(double newScale, const WebCore::FloatPoint& newScrollPosition, uint64_t transactionID) override;
void couldNotRestorePageState() override;
- void restorePageState(const WebCore::FloatRect&, const WebCore::IntPoint&, double) override;
+ void restorePageState(const WebCore::FloatPoint&, const WebCore::FloatPoint&, const WebCore::FloatSize&, double) override;
void restorePageCenterAndScale(const WebCore::FloatPoint&, double) override;
void startAssistingNode(const AssistedNodeInformation&, bool userIsInteracting, bool blurPreviousNode, API::Object* userData) override;
Modified: trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm (199232 => 199233)
--- trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm 2016-04-08 17:21:32 UTC (rev 199232)
+++ trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm 2016-04-08 17:22:19 UTC (rev 199233)
@@ -511,9 +511,9 @@
[m_webView _couldNotRestorePageState];
}
-void PageClientImpl::restorePageState(const WebCore::FloatRect& exposedContentRect, const WebCore::IntPoint& scrollOrigin, double scale)
+void PageClientImpl::restorePageState(const WebCore::FloatPoint& scrollPosition, const WebCore::FloatPoint& scrollOrigin, const WebCore::FloatSize& obscuredInsetOnSave, double scale)
{
- [m_webView _restorePageStateToExposedRect:exposedContentRect scrollOrigin:scrollOrigin scale:scale];
+ [m_webView _restorePageScrollPosition:scrollPosition scrollOrigin:scrollOrigin previousObscuredInset:obscuredInsetOnSave scale:scale];
}
void PageClientImpl::restorePageCenterAndScale(const WebCore::FloatPoint& center, double scale)
Modified: trunk/Source/WebKit2/UIProcess/ios/WKContentView.h (199232 => 199233)
--- trunk/Source/WebKit2/UIProcess/ios/WKContentView.h 2016-04-08 17:21:32 UTC (rev 199232)
+++ trunk/Source/WebKit2/UIProcess/ios/WKContentView.h 2016-04-08 17:22:19 UTC (rev 199233)
@@ -68,6 +68,7 @@
- (void)didUpdateVisibleRect:(CGRect)visibleRect unobscuredRect:(CGRect)unobscuredRect
unobscuredRectInScrollViewCoordinates:(CGRect)unobscuredRectInScrollViewCoordinates
+ obscuredInset:(CGSize)topInset
scale:(CGFloat)scale minimumScale:(CGFloat)minimumScale
inStableState:(BOOL)isStableState isChangingObscuredInsetsInteractively:(BOOL)isChangingObscuredInsetsInteractively;
Modified: trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm (199232 => 199233)
--- trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm 2016-04-08 17:21:32 UTC (rev 199232)
+++ trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm 2016-04-08 17:22:19 UTC (rev 199233)
@@ -356,7 +356,7 @@
}
- (void)didUpdateVisibleRect:(CGRect)visibleRect unobscuredRect:(CGRect)unobscuredRect unobscuredRectInScrollViewCoordinates:(CGRect)unobscuredRectInScrollViewCoordinates
- scale:(CGFloat)zoomScale minimumScale:(CGFloat)minimumScale inStableState:(BOOL)isStableState isChangingObscuredInsetsInteractively:(BOOL)isChangingObscuredInsetsInteractively
+ obscuredInset:(CGSize)obscuredInset scale:(CGFloat)zoomScale minimumScale:(CGFloat)minimumScale inStableState:(BOOL)isStableState isChangingObscuredInsetsInteractively:(BOOL)isChangingObscuredInsetsInteractively
{
double timestamp = monotonicallyIncreasingTime();
HistoricalVelocityData::VelocityData velocityData;
@@ -366,7 +366,7 @@
_historicalKinematicData.clear();
FloatRect fixedPositionRectForLayout = _page->computeCustomFixedPositionRect(unobscuredRect, zoomScale, WebPageProxy::UnobscuredRectConstraint::ConstrainedToDocumentRect);
- _page->updateVisibleContentRects(visibleRect, unobscuredRect, unobscuredRectInScrollViewCoordinates, fixedPositionRectForLayout,
+ _page->updateVisibleContentRects(visibleRect, unobscuredRect, unobscuredRectInScrollViewCoordinates, fixedPositionRectForLayout, WebCore::FloatSize(obscuredInset),
zoomScale, isStableState, isChangingObscuredInsetsInteractively, _webView._allowsViewportShrinkToFit, timestamp, velocityData.horizontalVelocity, velocityData.verticalVelocity, velocityData.scaleChangeRate);
RemoteScrollingCoordinatorProxy* scrollingCoordinator = _page->scrollingCoordinatorProxy();
Modified: trunk/Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm (199232 => 199233)
--- trunk/Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm 2016-04-08 17:21:32 UTC (rev 199232)
+++ trunk/Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm 2016-04-08 17:22:19 UTC (rev 199233)
@@ -182,12 +182,12 @@
callback->performCallbackWithReturnValue(beforeText, markedText, selectedText, afterText, location, length);
}
-void WebPageProxy::updateVisibleContentRects(const WebCore::FloatRect& exposedRect, const WebCore::FloatRect& unobscuredRect, const WebCore::FloatRect& unobscuredRectInScrollViewCoordinates, const WebCore::FloatRect& customFixedPositionRect, double scale, bool inStableState, bool isChangingObscuredInsetsInteractively, bool allowShrinkToFit, double timestamp, double horizontalVelocity, double verticalVelocity, double scaleChangeRate)
+void WebPageProxy::updateVisibleContentRects(const WebCore::FloatRect& exposedRect, const WebCore::FloatRect& unobscuredRect, const WebCore::FloatRect& unobscuredRectInScrollViewCoordinates, const WebCore::FloatRect& customFixedPositionRect, const WebCore::FloatSize& obscuredInset, double scale, bool inStableState, bool isChangingObscuredInsetsInteractively, bool allowShrinkToFit, double timestamp, double horizontalVelocity, double verticalVelocity, double scaleChangeRate)
{
if (!isValid())
return;
- VisibleContentRectUpdateInfo visibleContentRectUpdateInfo(exposedRect, unobscuredRect, unobscuredRectInScrollViewCoordinates, customFixedPositionRect, scale, inStableState, isChangingObscuredInsetsInteractively, allowShrinkToFit, timestamp, horizontalVelocity, verticalVelocity, scaleChangeRate, downcast<RemoteLayerTreeDrawingAreaProxy>(*drawingArea()).lastCommittedLayerTreeTransactionID());
+ VisibleContentRectUpdateInfo visibleContentRectUpdateInfo(exposedRect, unobscuredRect, unobscuredRectInScrollViewCoordinates, customFixedPositionRect, obscuredInset, scale, inStableState, isChangingObscuredInsetsInteractively, allowShrinkToFit, timestamp, horizontalVelocity, verticalVelocity, scaleChangeRate, downcast<RemoteLayerTreeDrawingAreaProxy>(*drawingArea()).lastCommittedLayerTreeTransactionID());
if (visibleContentRectUpdateInfo == m_lastVisibleContentRectUpdate)
return;
@@ -819,9 +819,9 @@
m_pageClient.couldNotRestorePageState();
}
-void WebPageProxy::restorePageState(const WebCore::FloatRect& exposedContentRect, const WebCore::IntPoint& scrollOrigin, double scale)
+void WebPageProxy::restorePageState(const WebCore::FloatPoint& scrollPosition, const WebCore::FloatPoint& scrollOrigin, const WebCore::FloatSize& obscuredInsetOnSave, double scale)
{
- m_pageClient.restorePageState(exposedContentRect, scrollOrigin, scale);
+ m_pageClient.restorePageState(scrollPosition, scrollOrigin, obscuredInsetOnSave, scale);
}
void WebPageProxy::restorePageCenterAndScale(const WebCore::FloatPoint& center, double scale)
Modified: trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm (199232 => 199233)
--- trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm 2016-04-08 17:21:32 UTC (rev 199232)
+++ trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm 2016-04-08 17:22:19 UTC (rev 199233)
@@ -299,7 +299,7 @@
m_drawingArea->setExposedContentRect(historyItem.exposedContentRect());
- send(Messages::WebPageProxy::RestorePageState(historyItem.exposedContentRect(), frameView.scrollOrigin(), boundedScale));
+ send(Messages::WebPageProxy::RestorePageState(historyItem.scrollPosition(), frameView.scrollOrigin(), historyItem.obscuredInset(), boundedScale));
} else {
IntSize oldContentSize = historyItem.contentSize();
IntSize newContentSize = frameView.contentsSize();
@@ -2964,6 +2964,7 @@
viewportConfigurationChanged();
frameView.setUnobscuredContentSize(visibleContentRectUpdateInfo.unobscuredContentRect().size());
+ frameView.platformSetObscuredInset(visibleContentRectUpdateInfo.obscuredInset());
double horizontalVelocity = visibleContentRectUpdateInfo.horizontalVelocity();
double verticalVelocity = visibleContentRectUpdateInfo.verticalVelocity();