Diff
Modified: trunk/Source/WebCore/ChangeLog (200469 => 200470)
--- trunk/Source/WebCore/ChangeLog 2016-05-05 19:46:12 UTC (rev 200469)
+++ trunk/Source/WebCore/ChangeLog 2016-05-05 20:01:13 UTC (rev 200470)
@@ -1,3 +1,20 @@
+2016-05-05 Simon Fraser <simon.fra...@apple.com>
+
+ Revert r200390, thus putting r199259 and r200161 and back.
+
+ * loader/HistoryController.cpp:
+ (WebCore::HistoryController::saveScrollPositionAndViewStateToItem):
+ * page/FrameView.cpp:
+ (WebCore::FrameView::adjustTiledBackingScrollability):
+ * page/Page.h:
+ (WebCore::Page::obscuredInset):
+ (WebCore::Page::setObscuredInset):
+ (WebCore::Page::enclosedInScrollableAncestorView):
+ (WebCore::Page::setEnclosedInScrollableAncestorView):
+ * platform/ScrollView.h:
+ (WebCore::ScrollView::platformObscuredInset): Deleted.
+ (WebCore::ScrollView::platformSetObscuredInset): Deleted.
+
2016-05-05 Sam Weinig <s...@webkit.org>
Fix the build.
Modified: trunk/Source/WebCore/loader/HistoryController.cpp (200469 => 200470)
--- trunk/Source/WebCore/loader/HistoryController.cpp 2016-05-05 19:46:12 UTC (rev 200469)
+++ trunk/Source/WebCore/loader/HistoryController.cpp 2016-05-05 20:01:13 UTC (rev 200470)
@@ -79,15 +79,19 @@
item->setScrollPosition(frameView->cachedScrollPosition());
else
item->setScrollPosition(frameView->scrollPosition());
+
#if PLATFORM(IOS)
item->setExposedContentRect(frameView->exposedContentRect());
item->setUnobscuredContentRect(frameView->unobscuredContentRect());
- item->setObscuredInset(frameView->platformObscuredInset());
#endif
Page* page = m_frame.page();
- if (page && m_frame.isMainFrame())
+ if (page && m_frame.isMainFrame()) {
item->setPageScaleFactor(page->pageScaleFactor() / page->viewScaleFactor());
+#if PLATFORM(IOS)
+ item->setObscuredInset(page->obscuredInset());
+#endif
+ }
// FIXME: It would be great to work out a way to put this code in WebCore instead of calling through to the client.
m_frame.loader().client().saveViewStateToItem(item);
Modified: trunk/Source/WebCore/page/FrameView.cpp (200469 => 200470)
--- trunk/Source/WebCore/page/FrameView.cpp 2016-05-05 19:46:12 UTC (rev 200469)
+++ trunk/Source/WebCore/page/FrameView.cpp 2016-05-05 20:01:13 UTC (rev 200470)
@@ -2485,6 +2485,11 @@
bool verticallyScrollable;
bool clippedByAncestorView = static_cast<bool>(m_viewExposedRect);
+#if PLATFORM(IOS)
+ if (Page* page = frame().page())
+ clippedByAncestorView |= page->enclosedInScrollableAncestorView();
+#endif
+
if (delegatesScrolling()) {
IntSize documentSize = contentsSize();
IntSize visibleSize = this->visibleSize();
Modified: trunk/Source/WebCore/page/Page.h (200469 => 200470)
--- trunk/Source/WebCore/page/Page.h 2016-05-05 19:46:12 UTC (rev 200469)
+++ trunk/Source/WebCore/page/Page.h 2016-05-05 20:01:13 UTC (rev 200470)
@@ -294,7 +294,15 @@
float topContentInset() const { return m_topContentInset; }
WEBCORE_EXPORT void setTopContentInset(float);
+
+#if PLATFORM(IOS)
+ FloatSize obscuredInset() const { return m_obscuredInset; }
+ void setObscuredInset(FloatSize inset) { m_obscuredInset = inset; }
+ bool enclosedInScrollableAncestorView() const { return m_enclosedInScrollableAncestorView; }
+ void setEnclosedInScrollableAncestorView(bool f) { m_enclosedInScrollableAncestorView = f; }
+#endif
+
#if ENABLE(IOS_TEXT_AUTOSIZING)
float textAutosizingWidth() const { return m_textAutosizingWidth; }
void setTextAutosizingWidth(float textAutosizingWidth) { m_textAutosizingWidth = textAutosizingWidth; }
@@ -600,7 +608,13 @@
float m_viewScaleFactor { 1 };
float m_topContentInset;
-
+
+#if PLATFORM(IOS)
+ // This is only used for history scroll position restoration.
+ FloatSize m_obscuredInset;
+ bool m_enclosedInScrollableAncestorView { false };
+#endif
+
#if ENABLE(IOS_TEXT_AUTOSIZING)
float m_textAutosizingWidth;
#endif
Modified: trunk/Source/WebCore/platform/ScrollView.h (200469 => 200470)
--- trunk/Source/WebCore/platform/ScrollView.h 2016-05-05 19:46:12 UTC (rev 200469)
+++ trunk/Source/WebCore/platform/ScrollView.h 2016-05-05 20:01:13 UTC (rev 200470)
@@ -378,11 +378,6 @@
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();
@@ -458,7 +453,6 @@
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 (200469 => 200470)
--- trunk/Source/WebKit2/ChangeLog 2016-05-05 19:46:12 UTC (rev 200469)
+++ trunk/Source/WebKit2/ChangeLog 2016-05-05 20:01:13 UTC (rev 200470)
@@ -1,3 +1,43 @@
+2016-05-05 Simon Fraser <simon.fra...@apple.com>
+
+ Revert r200390, thus putting r199259 and r200161 and back.
+
+ * Shared/VisibleContentRectUpdateInfo.cpp:
+ (WebKit::VisibleContentRectUpdateInfo::encode):
+ (WebKit::VisibleContentRectUpdateInfo::decode):
+ * Shared/VisibleContentRectUpdateInfo.h:
+ (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
+ (WebKit::VisibleContentRectUpdateInfo::enclosedInScrollableAncestorView):
+ (WebKit::operator==):
+ * UIProcess/API/Cocoa/WKWebView.mm:
+ (-[WKWebView _didInvokeUIScrollViewDelegateCallback]):
+ (-[WKWebView _didFinishScrolling]):
+ (-[WKWebView scrollViewDidScroll:]):
+ (-[WKWebView scrollViewDidZoom:]):
+ (-[WKWebView scrollViewDidEndZooming:withView:atScale:]):
+ (-[WKWebView _scrollViewDidInterruptDecelerating:]):
+ (-[WKWebView _visibleRectInEnclosingScrollView:]):
+ (-[WKWebView _visibleContentRect]):
+ (-[WKWebView _didScroll]):
+ (-[WKWebView _enclosingScrollerScrollingEnded:]):
+ (-[WKWebView _frameOrBoundsChanged]):
+ (-[WKWebView _updateVisibleContentRects]):
+ (-[WKWebView _updateVisibleContentRectAfterScrollInView:]):
+ (scrollViewCanScroll):
+ (-[WKWebView _updateContentRectsWithState:]):
+ * UIProcess/API/Cocoa/WKWebViewInternal.h:
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/ios/WKContentView.h:
+ * UIProcess/ios/WKContentView.mm:
+ (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInset:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]):
+ (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInset:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:]): Deleted.
+ * UIProcess/ios/WebPageProxyIOS.mm:
+ (WebKit::WebPageProxy::updateVisibleContentRects):
+ * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
+ (WebKit::RemoteLayerTreeDrawingAreaProxy::indicatorLocation):
+ * WebProcess/WebPage/ios/WebPageIOS.mm:
+ (WebKit::WebPage::updateVisibleContentRects):
+
2016-05-02 Sam Weinig <s...@webkit.org>
On platforms that support it, use a SecTrustRef as the basis of CertificateInfo instead of a chain of SecCertificateRefs.
Modified: trunk/Source/WebKit2/Shared/VisibleContentRectUpdateInfo.cpp (200469 => 200470)
--- trunk/Source/WebKit2/Shared/VisibleContentRectUpdateInfo.cpp 2016-05-05 19:46:12 UTC (rev 200469)
+++ trunk/Source/WebKit2/Shared/VisibleContentRectUpdateInfo.cpp 2016-05-05 20:01:13 UTC (rev 200470)
@@ -46,6 +46,7 @@
encoder << m_inStableState;
encoder << m_isChangingObscuredInsetsInteractively;
encoder << m_allowShrinkToFit;
+ encoder << m_enclosedInScrollableAncestorView;
}
bool VisibleContentRectUpdateInfo::decode(IPC::ArgumentDecoder& decoder, VisibleContentRectUpdateInfo& result)
@@ -78,6 +79,8 @@
return false;
if (!decoder.decode(result.m_allowShrinkToFit))
return false;
+ if (!decoder.decode(result.m_enclosedInScrollableAncestorView))
+ return false;
return true;
}
Modified: trunk/Source/WebKit2/Shared/VisibleContentRectUpdateInfo.h (200469 => 200470)
--- trunk/Source/WebKit2/Shared/VisibleContentRectUpdateInfo.h 2016-05-05 19:46:12 UTC (rev 200469)
+++ trunk/Source/WebKit2/Shared/VisibleContentRectUpdateInfo.h 2016-05-05 20:01:13 UTC (rev 200470)
@@ -41,7 +41,7 @@
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,
+ const WebCore::FloatSize& obscuredInset, double scale, bool inStableState, bool isChangingObscuredInsetsInteractively, bool allowShrinkToFit, bool enclosedInScrollableAncestorView,
double timestamp, double horizontalVelocity, double verticalVelocity, double scaleChangeRate, uint64_t lastLayerTreeTransactionId)
: m_exposedContentRect(exposedContentRect)
, m_unobscuredContentRect(unobscuredContentRect)
@@ -57,6 +57,7 @@
, m_inStableState(inStableState)
, m_isChangingObscuredInsetsInteractively(isChangingObscuredInsetsInteractively)
, m_allowShrinkToFit(allowShrinkToFit)
+ , m_enclosedInScrollableAncestorView(enclosedInScrollableAncestorView)
{
}
@@ -70,6 +71,7 @@
bool inStableState() const { return m_inStableState; }
bool isChangingObscuredInsetsInteractively() const { return m_isChangingObscuredInsetsInteractively; }
bool allowShrinkToFit() const { return m_allowShrinkToFit; }
+ bool enclosedInScrollableAncestorView() const { return m_enclosedInScrollableAncestorView; }
double timestamp() const { return m_timestamp; }
double horizontalVelocity() const { return m_horizontalVelocity; }
@@ -96,6 +98,7 @@
bool m_inStableState { false };
bool m_isChangingObscuredInsetsInteractively { false };
bool m_allowShrinkToFit { false };
+ bool m_enclosedInScrollableAncestorView { false };
};
inline bool operator==(const VisibleContentRectUpdateInfo& a, const VisibleContentRectUpdateInfo& b)
@@ -110,7 +113,8 @@
&& a.verticalVelocity() == b.verticalVelocity()
&& a.scaleChangeRate() == b.scaleChangeRate()
&& a.inStableState() == b.inStableState()
- && a.allowShrinkToFit() == b.allowShrinkToFit();
+ && a.allowShrinkToFit() == b.allowShrinkToFit()
+ && a.enclosedInScrollableAncestorView() == b.enclosedInScrollableAncestorView();
}
} // namespace WebKit
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (200469 => 200470)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm 2016-05-05 19:46:12 UTC (rev 200469)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm 2016-05-05 20:01:13 UTC (rev 200470)
@@ -242,6 +242,9 @@
RetainPtr<UIView <WKWebViewContentProvider>> _customContentView;
RetainPtr<UIView> _customContentFixedOverlayView;
+ RetainPtr<NSTimer> _enclosingScrollViewScrollTimer;
+ BOOL _didScrollSinceLastTimerFire;
+
WebCore::Color _scrollViewBackgroundColor;
// This value tracks the current adjustment added to the bottom inset due to the keyboard sliding out from the bottom
@@ -1048,7 +1051,7 @@
_delayUpdateVisibleContentRects = NO;
if (_hadDelayedUpdateVisibleContentRects) {
_hadDelayedUpdateVisibleContentRects = NO;
- [self _updateVisibleContentRects];
+ [self _updateVisibleContentRectAfterScrollInView:_scrollView.get()];
}
}
@@ -1792,7 +1795,7 @@
if (![self usesStandardContentView])
return;
- [self _updateVisibleContentRects];
+ [self _updateVisibleContentRectAfterScrollInView:_scrollView.get()];
[_contentView didFinishScrolling];
}
@@ -1846,7 +1849,7 @@
if (![self usesStandardContentView])
[_customContentView scrollViewDidScroll:(UIScrollView *)scrollView];
- [self _updateVisibleContentRects];
+ [self _updateVisibleContentRectAfterScrollInView:scrollView];
if (WebKit::RemoteLayerTreeScrollingPerformanceData* scrollPerfData = _page->scrollingPerformanceData())
scrollPerfData->didScroll([self visibleRectInViewCoordinates]);
@@ -1855,13 +1858,13 @@
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
[self _updateScrollViewBackground];
- [self _updateVisibleContentRects];
+ [self _updateVisibleContentRectAfterScrollInView:scrollView];
}
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale
{
ASSERT(scrollView == _scrollView);
- [self _updateVisibleContentRects];
+ [self _updateVisibleContentRectAfterScrollInView:scrollView];
[_contentView didZoomToScale:scale];
}
@@ -1876,7 +1879,55 @@
return;
[_contentView didInterruptScrolling];
+ [self _updateVisibleContentRectAfterScrollInView:scrollView];
+}
+
+- (CGRect)_visibleRectInEnclosingScrollView:(UIScrollView *)enclosingScrollView
+{
+ if (!enclosingScrollView)
+ return self.bounds;
+
+ CGRect exposedRect = [enclosingScrollView convertRect:enclosingScrollView.bounds toView:self];
+ return CGRectIntersectsRect(exposedRect, self.bounds) ? CGRectIntersection(exposedRect, self.bounds) : CGRectZero;
+}
+
+- (CGRect)_visibleContentRect
+{
+ CGRect visibleRectInContentCoordinates = _frozenVisibleContentRect ? _frozenVisibleContentRect.value() : [self convertRect:self.bounds toView:_contentView.get()];
+
+ if (UIScrollView *enclosingScroller = [self _scroller]) {
+ CGRect viewVisibleRect = [self _visibleRectInEnclosingScrollView:enclosingScroller];
+ CGRect viewVisibleContentRect = [self convertRect:viewVisibleRect toView:_contentView.get()];
+ visibleRectInContentCoordinates = CGRectIntersection(visibleRectInContentCoordinates, viewVisibleContentRect);
+ }
+
+ return visibleRectInContentCoordinates;
+}
+
+// Called when some ancestor UIScrollView scrolls.
+- (void)_didScroll
+{
+ [self _updateVisibleContentRectAfterScrollInView:[self _scroller]];
+
+ const NSTimeInterval ScrollingEndedTimerInterval = 0.032;
+ if (!_enclosingScrollViewScrollTimer) {
+ _enclosingScrollViewScrollTimer = adoptNS([[NSTimer alloc] initWithFireDate:[NSDate dateWithTimeIntervalSinceNow:ScrollingEndedTimerInterval]
+ interval:0 target:self selector:@selector(_enclosingScrollerScrollingEnded:) userInfo:nil repeats:YES]);
+ [[NSRunLoop mainRunLoop] addTimer:_enclosingScrollViewScrollTimer.get() forMode:NSDefaultRunLoopMode];
+ }
+ _didScrollSinceLastTimerFire = YES;
+}
+
+- (void)_enclosingScrollerScrollingEnded:(NSTimer *)timer
+{
+ if (_didScrollSinceLastTimerFire) {
+ _didScrollSinceLastTimerFire = NO;
+ return;
+ }
+
[self _updateVisibleContentRects];
+ [_enclosingScrollViewScrollTimer invalidate];
+ _enclosingScrollViewScrollTimer = nil;
}
- (void)_frameOrBoundsChanged
@@ -1889,7 +1940,7 @@
_page->setViewportConfigurationMinimumLayoutSize(WebCore::FloatSize(bounds.size));
if (!_overridesMaximumUnobscuredSize)
_page->setMaximumUnobscuredSize(WebCore::FloatSize(bounds.size));
- if (WebKit::DrawingAreaProxy* drawingArea = _page->drawingArea())
+ if (auto drawingArea = _page->drawingArea())
drawingArea->setSize(WebCore::IntSize(bounds.size), WebCore::IntSize(), WebCore::IntSize());
}
@@ -1919,6 +1970,42 @@
- (void)_updateVisibleContentRects
{
+ // For visible rect updates not associated with a spefic UIScrollView, just consider our own scroller.
+ [self _updateVisibleContentRectAfterScrollInView:_scrollView.get()];
+}
+
+- (void)_updateVisibleContentRectAfterScrollInView:(UIScrollView *)scrollView
+{
+ BOOL isStableState = !([scrollView isDragging] || [scrollView isDecelerating] || [scrollView isZooming] || [scrollView _isAnimatingZoom] || [scrollView _isScrollingToTop]);
+
+ if (isStableState && scrollView == _scrollView.get())
+ isStableState = !_isChangingObscuredInsetsInteractively;
+
+ if (isStableState && scrollView == _scrollView.get())
+ isStableState = ![self _scrollViewIsRubberBanding];
+
+ // FIXME: this can be made static after we stop supporting iOS 8.x.
+ if (isStableState && [scrollView respondsToSelector:@selector(_isInterruptingDeceleration)])
+ isStableState = ![scrollView performSelector:@selector(_isInterruptingDeceleration)];
+
+ [self _updateContentRectsWithState:isStableState];
+}
+
+static bool scrollViewCanScroll(UIScrollView *scrollView)
+{
+ if (!scrollView)
+ return NO;
+
+ UIEdgeInsets contentInset = scrollView.contentInset;
+ CGSize contentSize = scrollView.contentSize;
+ CGSize boundsSize = scrollView.bounds.size;
+
+ return (contentSize.width + contentInset.left + contentInset.right) > boundsSize.width
+ || (contentSize.height + contentInset.top + contentInset.bottom) > boundsSize.height;
+}
+
+- (void)_updateContentRectsWithState:(BOOL)inStableState
+{
if (![self usesStandardContentView]) {
[_customContentView web_computedContentInsetDidChange];
return;
@@ -1936,7 +2023,7 @@
return;
CGRect fullViewRect = self.bounds;
- CGRect visibleRectInContentCoordinates = _frozenVisibleContentRect ? _frozenVisibleContentRect.value() : [self convertRect:fullViewRect toView:_contentView.get()];
+ CGRect visibleRectInContentCoordinates = [self _visibleContentRect];
UIEdgeInsets computedContentInsetUnadjustedForKeyboard = [self _computedContentInset];
if (!_haveSetObscuredInsets)
@@ -1947,17 +2034,10 @@
CGFloat scaleFactor = contentZoomScale(self);
- BOOL isStableState = !(_isChangingObscuredInsetsInteractively || [_scrollView isDragging] || [_scrollView isDecelerating] || [_scrollView isZooming] || [_scrollView _isAnimatingZoom] || [_scrollView _isScrollingToTop] || [self _scrollViewIsRubberBanding]);
-
- // FIXME: this can be made static after we stop supporting iOS 8.x.
- if (isStableState && [_scrollView respondsToSelector:@selector(_isInterruptingDeceleration)])
- isStableState = ![_scrollView performSelector:@selector(_isInterruptingDeceleration)];
-
#if ENABLE(CSS_SCROLL_SNAP) && ENABLE(ASYNC_SCROLLING)
- if (isStableState) {
+ if (inStableState) {
WebKit::RemoteScrollingCoordinatorProxy* coordinator = _page->scrollingCoordinatorProxy();
if (coordinator && coordinator->hasActiveSnapPoint()) {
- CGRect fullViewRect = self.bounds;
CGRect unobscuredRect = UIEdgeInsetsInsetRect(fullViewRect, computedContentInsetUnadjustedForKeyboard);
CGPoint currentPoint = [_scrollView contentOffset];
@@ -1978,8 +2058,9 @@
unobscuredRectInScrollViewCoordinates:unobscuredRect
obscuredInset:CGSizeMake(_obscuredInsets.left, _obscuredInsets.top)
scale:scaleFactor minimumScale:[_scrollView minimumZoomScale]
- inStableState:isStableState
- isChangingObscuredInsetsInteractively:_isChangingObscuredInsetsInteractively];
+ inStableState:inStableState
+ isChangingObscuredInsetsInteractively:_isChangingObscuredInsetsInteractively
+ enclosedInScrollableAncestorView:scrollViewCanScroll([self _scroller])];
}
- (void)_didFinishLoadForMainFrame
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewInternal.h (200469 => 200470)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewInternal.h 2016-05-05 19:46:12 UTC (rev 200469)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewInternal.h 2016-05-05 20:01:13 UTC (rev 200470)
@@ -99,6 +99,8 @@
- (void)_didInvokeUIScrollViewDelegateCallback;
- (void)_updateVisibleContentRects;
+- (void)_updateVisibleContentRectAfterScrollInView:(UIScrollView *)scrollView;
+- (void)_updateContentRectsWithState:(BOOL)inStableState;
- (void)_didFinishLoadForMainFrame;
- (void)_didFailLoadForMainFrame;
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (200469 => 200470)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2016-05-05 19:46:12 UTC (rev 200469)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2016-05-05 20:01:13 UTC (rev 200470)
@@ -455,7 +455,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, const WebCore::FloatSize& obscuredInset, double scale, bool inStableState, bool isChangingObscuredInsetsInteractively, bool allowShrinkToFit, double timestamp, double horizontalVelocity, double verticalVelocity, double scaleChangeRate);
+ void updateVisibleContentRects(const VisibleContentRectUpdateInfo&);
void resendLastVisibleContentRects();
enum class UnobscuredRectConstraint { ConstrainedToDocumentRect, Unconstrained };
Modified: trunk/Source/WebKit2/UIProcess/ios/WKContentView.h (200469 => 200470)
--- trunk/Source/WebKit2/UIProcess/ios/WKContentView.h 2016-05-05 19:46:12 UTC (rev 200469)
+++ trunk/Source/WebKit2/UIProcess/ios/WKContentView.h 2016-05-05 20:01:13 UTC (rev 200470)
@@ -70,7 +70,9 @@
unobscuredRectInScrollViewCoordinates:(CGRect)unobscuredRectInScrollViewCoordinates
obscuredInset:(CGSize)topInset
scale:(CGFloat)scale minimumScale:(CGFloat)minimumScale
- inStableState:(BOOL)isStableState isChangingObscuredInsetsInteractively:(BOOL)isChangingObscuredInsetsInteractively;
+ inStableState:(BOOL)isStableState
+ isChangingObscuredInsetsInteractively:(BOOL)isChangingObscuredInsetsInteractively
+ enclosedInScrollableAncestorView:(BOOL)enclosedInScrollableAncestorView;
- (void)didFinishScrolling;
- (void)didInterruptScrolling;
Modified: trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm (200469 => 200470)
--- trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm 2016-05-05 19:46:12 UTC (rev 200469)
+++ trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm 2016-05-05 20:01:13 UTC (rev 200470)
@@ -356,8 +356,12 @@
}
- (void)didUpdateVisibleRect:(CGRect)visibleRect unobscuredRect:(CGRect)unobscuredRect unobscuredRectInScrollViewCoordinates:(CGRect)unobscuredRectInScrollViewCoordinates
- obscuredInset:(CGSize)obscuredInset 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 enclosedInScrollableAncestorView:(BOOL)enclosedInScrollableAncestorView
{
+ auto drawingArea = _page->drawingArea();
+ if (!drawingArea)
+ return;
+
double timestamp = monotonicallyIncreasingTime();
HistoricalVelocityData::VelocityData velocityData;
if (!isStableState)
@@ -366,16 +370,32 @@
_historicalKinematicData.clear();
FloatRect fixedPositionRectForLayout = _page->computeCustomFixedPositionRect(unobscuredRect, zoomScale, WebPageProxy::UnobscuredRectConstraint::ConstrainedToDocumentRect);
- _page->updateVisibleContentRects(visibleRect, unobscuredRect, unobscuredRectInScrollViewCoordinates, fixedPositionRectForLayout, WebCore::FloatSize(obscuredInset),
- zoomScale, isStableState, isChangingObscuredInsetsInteractively, _webView._allowsViewportShrinkToFit, timestamp, velocityData.horizontalVelocity, velocityData.verticalVelocity, velocityData.scaleChangeRate);
+ VisibleContentRectUpdateInfo visibleContentRectUpdateInfo(
+ visibleRect,
+ unobscuredRect,
+ unobscuredRectInScrollViewCoordinates,
+ fixedPositionRectForLayout,
+ WebCore::FloatSize(obscuredInset),
+ zoomScale,
+ isStableState,
+ isChangingObscuredInsetsInteractively,
+ _webView._allowsViewportShrinkToFit,
+ enclosedInScrollableAncestorView,
+ timestamp,
+ velocityData.horizontalVelocity,
+ velocityData.verticalVelocity,
+ velocityData.scaleChangeRate,
+ downcast<RemoteLayerTreeDrawingAreaProxy>(*drawingArea).lastCommittedLayerTreeTransactionID());
+
+ _page->updateVisibleContentRects(visibleContentRectUpdateInfo);
+
RemoteScrollingCoordinatorProxy* scrollingCoordinator = _page->scrollingCoordinatorProxy();
FloatRect fixedPositionRect = _page->computeCustomFixedPositionRect(_page->unobscuredContentRect(), zoomScale);
scrollingCoordinator->viewportChangedViaDelegatedScrolling(scrollingCoordinator->rootScrollingNodeID(), fixedPositionRect, zoomScale);
- if (auto drawingArea = _page->drawingArea())
- drawingArea->updateDebugIndicator();
-
+ drawingArea->updateDebugIndicator();
+
[self updateFixedClippingView:fixedPositionRect];
}
Modified: trunk/Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm (200469 => 200470)
--- trunk/Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm 2016-05-05 19:46:12 UTC (rev 200469)
+++ trunk/Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm 2016-05-05 20:01:13 UTC (rev 200470)
@@ -182,18 +182,16 @@
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, const WebCore::FloatSize& obscuredInset, double scale, bool inStableState, bool isChangingObscuredInsetsInteractively, bool allowShrinkToFit, double timestamp, double horizontalVelocity, double verticalVelocity, double scaleChangeRate)
+void WebPageProxy::updateVisibleContentRects(const VisibleContentRectUpdateInfo& visibleContentRectUpdate)
{
if (!isValid())
return;
- VisibleContentRectUpdateInfo visibleContentRectUpdateInfo(exposedRect, unobscuredRect, unobscuredRectInScrollViewCoordinates, customFixedPositionRect, obscuredInset, scale, inStableState, isChangingObscuredInsetsInteractively, allowShrinkToFit, timestamp, horizontalVelocity, verticalVelocity, scaleChangeRate, downcast<RemoteLayerTreeDrawingAreaProxy>(*drawingArea()).lastCommittedLayerTreeTransactionID());
-
- if (visibleContentRectUpdateInfo == m_lastVisibleContentRectUpdate)
+ if (visibleContentRectUpdate == m_lastVisibleContentRectUpdate)
return;
- m_lastVisibleContentRectUpdate = visibleContentRectUpdateInfo;
- m_process->send(Messages::ViewUpdateDispatcher::VisibleContentRectUpdate(m_pageID, visibleContentRectUpdateInfo), 0);
+ m_lastVisibleContentRectUpdate = visibleContentRectUpdate;
+ m_process->send(Messages::ViewUpdateDispatcher::VisibleContentRectUpdate(m_pageID, visibleContentRectUpdate), 0);
}
void WebPageProxy::resendLastVisibleContentRects()
Modified: trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm (200469 => 200470)
--- trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm 2016-05-05 19:46:12 UTC (rev 200469)
+++ trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm 2016-05-05 20:01:13 UTC (rev 200470)
@@ -259,6 +259,8 @@
if (m_webPageProxy.delegatesScrolling()) {
#if PLATFORM(IOS)
FloatPoint tiledMapLocation = m_webPageProxy.unobscuredContentRect().location();
+ tiledMapLocation = tiledMapLocation.expandedTo(m_webPageProxy.exposedContentRect().location() + FloatSize(0, 60));
+
float absoluteInset = indicatorInset / m_webPageProxy.displayedContentScale();
tiledMapLocation += FloatSize(absoluteInset, absoluteInset);
#else
Modified: trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm (200469 => 200470)
--- trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm 2016-05-05 19:46:12 UTC (rev 200469)
+++ trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm 2016-05-05 20:01:13 UTC (rev 200470)
@@ -2966,7 +2966,8 @@
viewportConfigurationChanged();
frameView.setUnobscuredContentSize(visibleContentRectUpdateInfo.unobscuredContentRect().size());
- frameView.platformSetObscuredInset(visibleContentRectUpdateInfo.obscuredInset());
+ m_page->setObscuredInset(visibleContentRectUpdateInfo.obscuredInset());
+ m_page->setEnclosedInScrollableAncestorView(visibleContentRectUpdateInfo.enclosedInScrollableAncestorView());
double horizontalVelocity = visibleContentRectUpdateInfo.horizontalVelocity();
double verticalVelocity = visibleContentRectUpdateInfo.verticalVelocity();