Skip to content
Permalink
Browse files
Regression (r244291): Broken API Test AutoLayoutRenderingProgressRela…
…tiveOrdering

https://bugs.webkit.org/show_bug.cgi?id=196948
<rdar://problem/49927131>

Reviewed by Tim Horton.

Source/WebCore:

Covered by existing tests.

* loader/EmptyClients.h:
* page/ChromeClient.h:
* page/FrameView.cpp:
(WebCore::FrameView::autoSizeIfEnabled):
(WebCore::FrameView::enableAutoSizeMode):
* page/FrameView.h:

Source/WebKit:

Move intrinsicContentSizeDidChange out of DrawingArea. Intrinsic content size is a layout concept and
after r244291 there's no reason to have it in DrawingArea.

* UIProcess/DrawingAreaProxy.h:
(WebKit::DrawingAreaProxy::didUpdateGeometry):
(WebKit::DrawingAreaProxy::intrinsicContentSizeDidChange): Deleted.
* UIProcess/DrawingAreaProxy.messages.in:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::didChangeIntrinsicContentSize):
(WebKit::WebPageProxy::setViewLayoutSize):
* UIProcess/WebPageProxy.h:
* UIProcess/WebPageProxy.messages.in:
* UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
* UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
(WebKit::TiledCoreAnimationDrawingAreaProxy::intrinsicContentSizeDidChange): Deleted.
* UIProcess/mac/WebPageProxyMac.mm:
(WebKit::WebPageProxy::intrinsicContentSizeDidChange): Deleted.
* WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::intrinsicContentsSizeChanged const):
* WebProcess/WebCoreSupport/WebChromeClient.h:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::updateIntrinsicContentSizeIfNeeded):
(WebKit::WebPage::dispatchDidReachLayoutMilestone):
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
* WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
(WebKit::TiledCoreAnimationDrawingArea::flushLayers):
(WebKit::TiledCoreAnimationDrawingArea::updateIntrinsicContentSizeIfNeeded): Deleted.

Source/WebKitLegacy/mac:

* WebCoreSupport/WebChromeClient.h:

Source/WebKitLegacy/win:

* WebCoreSupport/WebChromeClient.cpp:
(WebChromeClient::intrinsicContentsSizeChanged const):
* WebCoreSupport/WebChromeClient.h:

Tools:

* TestWebKitAPI/Tests/WebKitCocoa/AutoLayoutIntegration.mm:
(TEST):
The expected order of incoming events is
1. didInvalidateIntrinsicContentSize
2. didFirstLayout
At setRenderingProgressDidChange, we already check if didInvalidateIntrinsicContentSize comes in first.
However it's not guaranteed that the milestone event is delayed until after TestWebKitAPI::Util::run() is finished
(and remember, all we care about is ordering).


Canonical link: https://commits.webkit.org/211477@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@244633 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  • Loading branch information
alanbujtas committed Apr 25, 2019
1 parent 446ee57 commit 36ad0d2f8cfaf6c4f5db3c45837771094f162ce7
Showing 27 changed files with 148 additions and 47 deletions.
@@ -1,3 +1,20 @@
2019-04-24 Zalan Bujtas <zalan@apple.com>

Regression (r244291): Broken API Test AutoLayoutRenderingProgressRelativeOrdering
https://bugs.webkit.org/show_bug.cgi?id=196948
<rdar://problem/49927131>

Reviewed by Tim Horton.

Covered by existing tests.

* loader/EmptyClients.h:
* page/ChromeClient.h:
* page/FrameView.cpp:
(WebCore::FrameView::autoSizeIfEnabled):
(WebCore::FrameView::enableAutoSizeMode):
* page/FrameView.h:

2019-04-24 Youenn Fablet <youenn@apple.com>

Do not restart WebRTC stats timer if backend is stopped
@@ -113,6 +113,7 @@ class EmptyChromeClient : public ChromeClient {

PlatformPageClient platformPageClient() const final { return 0; }
void contentsSizeChanged(Frame&, const IntSize&) const final { }
void intrinsicContentsSizeChanged(const IntSize&) const final { }

void mouseDidMoveOverElement(const HitTestResult&, unsigned) final { }

@@ -195,6 +195,7 @@ class WEBCORE_EXPORT ChromeClient {
virtual void dispatchViewportPropertiesDidChange(const ViewportArguments&) const { }

virtual void contentsSizeChanged(Frame&, const IntSize&) const = 0;
virtual void intrinsicContentsSizeChanged(const IntSize&) const = 0;
virtual void scrollRectIntoView(const IntRect&) const { }; // Currently only Mac has a non empty implementation.

virtual bool shouldUnavailablePluginMessageBeButton(RenderEmbeddedObject::PluginUnavailabilityReason) const { return false; }
@@ -3463,12 +3463,15 @@ void FrameView::autoSizeIfEnabled()
resize(m_autoSizeConstraint.width(), m_autoSizeConstraint.height());
document->updateStyleIfNeeded();
document->updateLayoutIgnorePendingStylesheets();
m_autoSizeContentSize = contentsSize();

auto finalWidth = std::max(m_autoSizeConstraint.width(), m_autoSizeContentSize.width());
auto finalHeight = m_autoSizeFixedMinimumHeight ? std::max(m_autoSizeFixedMinimumHeight, m_autoSizeContentSize.height()) : m_autoSizeContentSize.height();
auto currentContentsSize = this->contentsSize();
auto finalWidth = std::max(m_autoSizeConstraint.width(), currentContentsSize.width());
auto finalHeight = m_autoSizeFixedMinimumHeight ? std::max(m_autoSizeFixedMinimumHeight, currentContentsSize.height()) : currentContentsSize.height();
resize(finalWidth, finalHeight);
document->updateLayoutIgnorePendingStylesheets();
m_autoSizeContentSize = contentsSize();
if (auto* page = frame().page())
page->chrome().client().intrinsicContentsSizeChanged(m_autoSizeContentSize);
m_didRunAutosize = true;
}

@@ -4470,6 +4473,7 @@ void FrameView::enableAutoSizeMode(bool enable, const IntSize& viewSize)

m_shouldAutoSize = enable;
m_autoSizeConstraint = viewSize;
m_autoSizeContentSize = contentsSize();
m_didRunAutosize = false;

setNeedsLayoutAfterViewConfigurationChange();
@@ -401,6 +401,7 @@ class FrameView final : public ScrollView {
bool isVisuallyNonEmpty() const { return m_isVisuallyNonEmpty; }
WEBCORE_EXPORT void enableAutoSizeMode(bool enable, const IntSize& minSize);
WEBCORE_EXPORT void setAutoSizeFixedMinimumHeight(int);
bool isAutoSizeEnabled() const { return m_shouldAutoSize; }
IntSize autoSizingIntrinsicContentSize() const { return m_autoSizeContentSize; }

WEBCORE_EXPORT void forceLayout(bool allowSubtreeLayout = false);
@@ -1,3 +1,40 @@
2019-04-24 Zalan Bujtas <zalan@apple.com>

Regression (r244291): Broken API Test AutoLayoutRenderingProgressRelativeOrdering
https://bugs.webkit.org/show_bug.cgi?id=196948
<rdar://problem/49927131>

Reviewed by Tim Horton.

Move intrinsicContentSizeDidChange out of DrawingArea. Intrinsic content size is a layout concept and
after r244291 there's no reason to have it in DrawingArea.

* UIProcess/DrawingAreaProxy.h:
(WebKit::DrawingAreaProxy::didUpdateGeometry):
(WebKit::DrawingAreaProxy::intrinsicContentSizeDidChange): Deleted.
* UIProcess/DrawingAreaProxy.messages.in:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::didChangeIntrinsicContentSize):
(WebKit::WebPageProxy::setViewLayoutSize):
* UIProcess/WebPageProxy.h:
* UIProcess/WebPageProxy.messages.in:
* UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
* UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
(WebKit::TiledCoreAnimationDrawingAreaProxy::intrinsicContentSizeDidChange): Deleted.
* UIProcess/mac/WebPageProxyMac.mm:
(WebKit::WebPageProxy::intrinsicContentSizeDidChange): Deleted.
* WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::intrinsicContentsSizeChanged const):
* WebProcess/WebCoreSupport/WebChromeClient.h:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::updateIntrinsicContentSizeIfNeeded):
(WebKit::WebPage::dispatchDidReachLayoutMilestone):
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
* WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
(WebKit::TiledCoreAnimationDrawingArea::flushLayers):
(WebKit::TiledCoreAnimationDrawingArea::updateIntrinsicContentSizeIfNeeded): Deleted.

2019-04-24 Commit Queue <commit-queue@webkit.org>

Unreviewed, rolling out r244228.
@@ -143,7 +143,6 @@ class DrawingAreaProxy : public IPC::MessageReceiver, protected IPC::MessageSend
virtual void updateAcceleratedCompositingMode(uint64_t /* backingStoreStateID */, const LayerTreeContext&) { }
#if PLATFORM(COCOA)
virtual void didUpdateGeometry() { }
virtual void intrinsicContentSizeDidChange(const WebCore::IntSize&) { }

#if PLATFORM(MAC)
RunLoop::Timer<DrawingAreaProxy> m_viewExposedRectChangedTimer;
@@ -31,6 +31,5 @@ messages -> DrawingAreaProxy {
#if PLATFORM(COCOA)
// Used by TiledCoreAnimationDrawingAreaProxy.
DidUpdateGeometry()
IntrinsicContentSizeDidChange(WebCore::IntSize newIntrinsicContentSize)
#endif
}
@@ -5472,6 +5472,13 @@ void WebPageProxy::didChangeContentSize(const IntSize& size)
pageClient().didChangeContentSize(size);
}

void WebPageProxy::didChangeIntrinsicContentSize(const IntSize& intrinsicContentSize)
{
#if USE(APPKIT)
pageClient().intrinsicContentSizeDidChange(intrinsicContentSize);
#endif
}

#if ENABLE(INPUT_TYPE_COLOR)
void WebPageProxy::showColorPicker(const WebCore::Color& initialColor, const IntRect& elementRect, Vector<WebCore::Color>&& suggestions)
{
@@ -7604,7 +7611,7 @@ void WebPageProxy::setViewLayoutSize(const IntSize& viewLayoutSize)

#if USE(APPKIT)
if (m_viewLayoutSize.width() <= 0)
intrinsicContentSizeDidChange(IntSize(-1, -1));
didChangeIntrinsicContentSize(IntSize(-1, -1));
#endif
}

@@ -790,7 +790,6 @@ class WebPageProxy : public API::ObjectImpl<API::Object::Type::Page>
NSView *inspectorAttachmentView();
_WKRemoteObjectRegistry *remoteObjectRegistry();

void intrinsicContentSizeDidChange(const WebCore::IntSize& intrinsicContentSize);
CGRect boundsOfLayerInLayerBackedWindowCoordinates(CALayer *) const;
#endif // PLATFORM(MAC)

@@ -1714,6 +1713,7 @@ WEBPAGEPROXY_LOADOPTIMIZER_ADDITIONS_1
void didDestroyNotification(uint64_t notificationID);

void didChangeContentSize(const WebCore::IntSize&);
void didChangeIntrinsicContentSize(const WebCore::IntSize&);

#if ENABLE(INPUT_TYPE_COLOR)
void showColorPicker(const WebCore::Color& initialColor, const WebCore::IntRect&, Vector<WebCore::Color>&&);
@@ -88,6 +88,7 @@ messages -> WebPageProxy {
SetCanShortCircuitHorizontalWheelEvents(bool canShortCircuitHorizontalWheelEvents)

DidChangeContentSize(WebCore::IntSize newSize)
DidChangeIntrinsicContentSize(WebCore::IntSize newIntrinsicContentSize)

#if ENABLE(INPUT_TYPE_COLOR)
ShowColorPicker(WebCore::Color initialColor, WebCore::IntRect elementRect, Vector<WebCore::Color> suggestions);
@@ -60,7 +60,6 @@ class TiledCoreAnimationDrawingAreaProxy : public DrawingAreaProxy {

// Message handlers.
void didUpdateGeometry() override;
void intrinsicContentSizeDidChange(const WebCore::IntSize&) override;

void sendUpdateGeometry();

@@ -125,12 +125,6 @@
process().connection()->waitForAndDispatchImmediately<Messages::WebPageProxy::DidUpdateActivityState>(m_webPageProxy.pageID(), activityStateUpdateTimeout, IPC::WaitForOption::InterruptWaitingIfSyncMessageArrives);
}

void TiledCoreAnimationDrawingAreaProxy::intrinsicContentSizeDidChange(const IntSize& newIntrinsicContentSize)
{
if (m_webPageProxy.viewLayoutSize().width() > 0)
m_webPageProxy.intrinsicContentSizeDidChange(newIntrinsicContentSize);
}

void TiledCoreAnimationDrawingAreaProxy::willSendUpdateGeometry()
{
m_lastSentViewLayoutSize = m_webPageProxy.viewLayoutSize();
@@ -433,11 +433,6 @@ static inline bool expectsLegacyImplicitRubberBandControl()
return result;
}

void WebPageProxy::intrinsicContentSizeDidChange(const IntSize& intrinsicContentSize)
{
pageClient().intrinsicContentSizeDidChange(intrinsicContentSize);
}

void WebPageProxy::setRemoteLayerTreeRootNode(RemoteLayerTreeNode* rootNode)
{
pageClient().setRemoteLayerTreeRootNode(rootNode);
@@ -589,6 +589,11 @@ PlatformPageClient WebChromeClient::platformPageClient() const
return 0;
}

void WebChromeClient::intrinsicContentsSizeChanged(const IntSize& size) const
{
m_page.updateIntrinsicContentSizeIfNeeded(size);
}

void WebChromeClient::contentsSizeChanged(Frame& frame, const IntSize& size) const
{
FrameView* frameView = frame.view();
@@ -117,6 +117,7 @@ class WebChromeClient final : public WebCore::ChromeClient {

PlatformPageClient platformPageClient() const final;
void contentsSizeChanged(WebCore::Frame&, const WebCore::IntSize&) const final;
void intrinsicContentsSizeChanged(const WebCore::IntSize&) const final;
void scrollRectIntoView(const WebCore::IntRect&) const final; // Currently only Mac has a non empty implementation.

bool shouldUnavailablePluginMessageBeButton(WebCore::RenderEmbeddedObject::PluginUnavailabilityReason) const final;
@@ -6230,6 +6230,19 @@ void WebPage::removeAllUserContent()
m_userContentController->removeAllUserContent();
}

void WebPage::updateIntrinsicContentSizeIfNeeded(const WebCore::IntSize& size)
{
if (!viewLayoutSize().width())
return;
ASSERT(mainFrameView());
ASSERT(mainFrameView()->isAutoSizeEnabled());
ASSERT(!mainFrameView()->needsLayout());
if (m_lastSentIntrinsicContentSize == size)
return;
m_lastSentIntrinsicContentSize = size;
send(Messages::WebPageProxy::DidChangeIntrinsicContentSize(size));
}

void WebPage::dispatchDidReachLayoutMilestone(OptionSet<WebCore::LayoutMilestone> milestones)
{
RefPtr<API::Object> userData;
@@ -6245,6 +6258,10 @@ void WebPage::dispatchDidReachLayoutMilestone(OptionSet<WebCore::LayoutMilestone
if (drawingAreaRelatedMilestones && m_drawingArea->addMilestonesToDispatch(drawingAreaRelatedMilestones))
milestones.remove(drawingAreaRelatedMilestones);
}
if (milestones.contains(DidFirstLayout) && mainFrameView()) {
// Ensure we never send DidFirstLayout milestone without updating the intrinsic size.
updateIntrinsicContentSizeIfNeeded(mainFrameView()->autoSizingIntrinsicContentSize());
}

send(Messages::WebPageProxy::DidReachLayoutMilestone(milestones));
}
@@ -1178,6 +1178,8 @@ class WebPage : public API::ObjectImpl<API::Object::Type::BundlePage>, public IP

void setRemoteObjectRegistry(RemoteObjectRegistry&);

void updateIntrinsicContentSizeIfNeeded(const WebCore::IntSize&);

private:
WebPage(uint64_t pageID, WebPageCreationParameters&&);

@@ -1890,6 +1892,7 @@ class WebPage : public API::ObjectImpl<API::Object::Type::BundlePage>, public IP
#if PLATFORM(COCOA)
WeakPtr<RemoteObjectRegistry> m_remoteObjectRegistry;
#endif
WebCore::IntSize m_lastSentIntrinsicContentSize;
};

} // namespace WebKit
@@ -121,7 +121,6 @@ class TiledCoreAnimationDrawingArea : public DrawingArea, public CanMakeWeakPtr<
WebCore::TiledBacking* mainFrameTiledBacking() const;
void updateDebugInfoLayer(bool showLayer);

void updateIntrinsicContentSizeIfNeeded();
void updateScrolledExposedRect();
void scaleViewToFitDocumentIfNeeded();

@@ -150,8 +149,6 @@ class TiledCoreAnimationDrawingArea : public DrawingArea, public CanMakeWeakPtr<
WebCore::IntSize m_lastViewSizeForScaleToFit;
WebCore::IntSize m_lastDocumentSizeForScaleToFit;

WebCore::IntSize m_lastSentIntrinsicContentSize;

double m_transientZoomScale { 1 };
WebCore::FloatPoint m_transientZoomOrigin;

@@ -278,26 +278,6 @@ + (void)synchronize;
{
}

void TiledCoreAnimationDrawingArea::updateIntrinsicContentSizeIfNeeded()
{
if (!m_webPage.viewLayoutSize().width())
return;

FrameView* frameView = m_webPage.mainFrameView();
if (!frameView)
return;

if (frameView->needsLayout())
return;

IntSize contentSize = frameView->autoSizingIntrinsicContentSize();
if (m_lastSentIntrinsicContentSize == contentSize)
return;

m_lastSentIntrinsicContentSize = contentSize;
send(Messages::DrawingAreaProxy::IntrinsicContentSizeDidChange(contentSize));
}

void TiledCoreAnimationDrawingArea::setShouldScaleViewToFitDocument(bool shouldScaleView)
{
if (m_shouldScaleViewToFitDocument == shouldScaleView)
@@ -462,8 +442,6 @@ + (void)synchronize;
m_webPage.updateRendering();
m_webPage.flushPendingEditorStateUpdate();

updateIntrinsicContentSizeIfNeeded();

if (m_pendingRootLayer) {
setRootCompositingLayer(m_pendingRootLayer.get());
m_pendingRootLayer = nullptr;
@@ -1,3 +1,13 @@
2019-04-24 Zalan Bujtas <zalan@apple.com>

Regression (r244291): Broken API Test AutoLayoutRenderingProgressRelativeOrdering
https://bugs.webkit.org/show_bug.cgi?id=196948
<rdar://problem/49927131>

Reviewed by Tim Horton.

* WebCoreSupport/WebChromeClient.h:

2019-04-24 Eric Carlson <eric.carlson@apple.com>

Create AVFoundationSoftLink.{h,mm} to reduce duplicate code
@@ -104,6 +104,7 @@ class WebChromeClient : public WebCore::ChromeClient {

PlatformPageClient platformPageClient() const final;
void contentsSizeChanged(WebCore::Frame&, const WebCore::IntSize&) const final;
void intrinsicContentsSizeChanged(const WebCore::IntSize&) const final { }
void scrollRectIntoView(const WebCore::IntRect&) const final;

void setStatusbarText(const String&) override;
@@ -1,3 +1,15 @@
2019-04-24 Zalan Bujtas <zalan@apple.com>

Regression (r244291): Broken API Test AutoLayoutRenderingProgressRelativeOrdering
https://bugs.webkit.org/show_bug.cgi?id=196948
<rdar://problem/49927131>

Reviewed by Tim Horton.

* WebCoreSupport/WebChromeClient.cpp:
(WebChromeClient::intrinsicContentsSizeChanged const):
* WebCoreSupport/WebChromeClient.h:

2019-04-24 Simon Fraser <simon.fraser@apple.com>

Make it possible to control the renderTreeAsText output by setting options on testRunner
@@ -524,6 +524,11 @@ void WebChromeClient::contentsSizeChanged(Frame&, const IntSize&) const
notImplemented();
}

void WebChromeClient::intrinsicContentsSizeChanged(const IntSize&) const
{
notImplemented();
}

void WebChromeClient::mouseDidMoveOverElement(const HitTestResult& result, unsigned modifierFlags)
{
COMPtr<IWebUIDelegate> uiDelegate;
@@ -102,6 +102,7 @@ class WebChromeClient final : public WebCore::ChromeClient {
WebCore::IntRect rootViewToAccessibilityScreen(const WebCore::IntRect&) const final;
PlatformPageClient platformPageClient() const final;
void contentsSizeChanged(WebCore::Frame&, const WebCore::IntSize&) const final;
void intrinsicContentsSizeChanged(const WebCore::IntSize&) const final;

void mouseDidMoveOverElement(const WebCore::HitTestResult&, unsigned modifierFlags) final;
bool shouldUnavailablePluginMessageBeButton(WebCore::RenderEmbeddedObject::PluginUnavailabilityReason) const final;

0 comments on commit 36ad0d2

Please sign in to comment.