WebKit Bugzilla
Attachment 343446 Details for
Bug 186585
: [Mail] Use the Mail Viewer width as the base for resolving horizontal viewport units
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-186585-20180623132732.patch (text/plain), 11.12 KB, created by
zalan
on 2018-06-23 13:27:32 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
zalan
Created:
2018-06-23 13:27:32 PDT
Size:
11.12 KB
patch
obsolete
>Subversion Revision: 233130 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 3f45d9ce0a3cc9fddc318f4fa9b6a9d59414f09e..8ffb021ad5f848e06fb7849c0c980d8f46447b21 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,25 @@ >+2018-06-23 Zalan Bujtas <zalan@apple.com> >+ >+ [Mail] Use the Mail Viewer width as the base for resolving horizontal viewport units >+ https://bugs.webkit.org/show_bug.cgi?id=186585 >+ <rdar://problem/30685325> >+ >+ Reviewed by Tim Horton. >+ >+ Use the existing "override viewport size for viewport units" mechanism to compute the preferred >+ viewport unit values for the Mail Viewer html content. >+ >+ Test: fast/dynamic/mail-autosize-viewport-unit.html >+ >+ * page/FrameView.cpp: >+ (WebCore::FrameView::FrameView): >+ (WebCore::FrameView::enableAutoSizeMode): >+ (WebCore::FrameView::clearViewportSizeOverrideForCSSViewportUnits): >+ (WebCore::FrameView::setViewportSizeForCSSViewportUnits): >+ (WebCore::FrameView::overrideViewportSizeForCSSViewportUnits): >+ (WebCore::FrameView::viewportSizeForCSSViewportUnits const): >+ * page/FrameView.h: >+ > 2018-06-23 Zalan Bujtas <zalan@apple.com> > > [LFC] Relatively positioned renderer needs offsetting for validation >diff --git a/Source/WebCore/page/FrameView.cpp b/Source/WebCore/page/FrameView.cpp >index 86196201d7636dbf6067bca719a370595aac4b43..8d0d6566ca1a211c83d9675e4ec2a88baba2964e 100644 >--- a/Source/WebCore/page/FrameView.cpp >+++ b/Source/WebCore/page/FrameView.cpp >@@ -190,7 +190,6 @@ FrameView::FrameView(Frame& frame) > , m_useCustomFixedPositionLayoutRect(false) > , m_useCustomSizeForResizeEvent(false) > #endif >- , m_hasOverrideViewportSize(false) > , m_shouldAutoSize(false) > , m_inAutoSize(false) > , m_didRunAutosize(false) >@@ -4368,9 +4367,12 @@ void FrameView::enableAutoSizeMode(bool enable, const IntSize& minSize, const In > > setNeedsLayout(); > layoutContext().scheduleLayout(); >- if (m_shouldAutoSize) >+ if (m_shouldAutoSize) { >+ overrideViewportSizeForCSSViewportUnits({ minSize.width(), m_overrideViewportSize ? m_overrideViewportSize->height : std::nullopt }); > return; >+ } > >+ clearViewportSizeOverrideForCSSViewportUnits(); > // Since autosize mode forces the scrollbar mode, change them to being auto. > setVerticalScrollbarLock(false); > setHorizontalScrollbarLock(false); >@@ -5081,30 +5083,57 @@ void FrameView::setViewExposedRect(std::optional<FloatRect> viewExposedRect) > if (auto* page = frame().page()) > page->pageOverlayController().didChangeViewExposedRect(); > } >- >+ >+void FrameView::clearViewportSizeOverrideForCSSViewportUnits() >+{ >+ if (!m_overrideViewportSize) >+ return; >+ >+ m_overrideViewportSize = std::nullopt; >+ if (auto* document = frame().document()) >+ document->styleScope().didChangeStyleSheetEnvironment(); >+} >+ > void FrameView::setViewportSizeForCSSViewportUnits(IntSize size) > { >- if (m_hasOverrideViewportSize && m_overrideViewportSize == size) >+ overrideViewportSizeForCSSViewportUnits({ size.width(), size.height() }); >+} >+ >+void FrameView::overrideViewportSizeForCSSViewportUnits(OverrideViewportSize size) >+{ >+ if (m_overrideViewportSize && *m_overrideViewportSize == size) > return; >- >+ > m_overrideViewportSize = size; >- m_hasOverrideViewportSize = true; >- >- if (Document* document = frame().document()) >+ >+ if (auto* document = frame().document()) > document->styleScope().didChangeStyleSheetEnvironment(); > } >- >+ > IntSize FrameView::viewportSizeForCSSViewportUnits() const > { >- if (m_hasOverrideViewportSize) >- return m_overrideViewportSize; >+ OverrideViewportSize viewportSize; > >- if (useFixedLayout()) >- return fixedLayoutSize(); >+ if (m_overrideViewportSize) { >+ viewportSize = *m_overrideViewportSize; >+ // auto-size overrides the width only, so we can't always bail out early here. >+ if (viewportSize.width && viewportSize.height) >+ return { *viewportSize.width, *viewportSize.height }; >+ } >+ >+ if (useFixedLayout()) { >+ auto fixedLayoutSize = this->fixedLayoutSize(); >+ viewportSize.width = viewportSize.width.value_or(fixedLayoutSize.width()); >+ viewportSize.height = viewportSize.height.value_or(fixedLayoutSize.height()); >+ return { *viewportSize.width, *viewportSize.height }; >+ } > > // FIXME: the value returned should take into account the value of the overflow > // property on the root element. >- return visibleContentRectIncludingScrollbars().size(); >+ auto visibleContentSizeIncludingScrollbars = visibleContentRectIncludingScrollbars().size(); >+ viewportSize.width = viewportSize.width.value_or(visibleContentSizeIncludingScrollbars.width()); >+ viewportSize.height = viewportSize.height.value_or(visibleContentSizeIncludingScrollbars.height()); >+ return { *viewportSize.width, *viewportSize.height }; > } > > bool FrameView::shouldPlaceBlockDirectionScrollbarOnLeft() const >diff --git a/Source/WebCore/page/FrameView.h b/Source/WebCore/page/FrameView.h >index 8f60e7cdb275fbef0876bd10dc7382af634b9bda..11cffabcc5e926792d5ddb755a0c49e101643d7a 100644 >--- a/Source/WebCore/page/FrameView.h >+++ b/Source/WebCore/page/FrameView.h >@@ -211,8 +211,9 @@ public: > WEBCORE_EXPORT void adjustViewSize(); > > WEBCORE_EXPORT void setViewportSizeForCSSViewportUnits(IntSize); >+ void clearViewportSizeOverrideForCSSViewportUnits(); > IntSize viewportSizeForCSSViewportUnits() const; >- >+ > IntRect windowClipRect() const final; > WEBCORE_EXPORT IntRect windowClipRectForFrameOwner(const HTMLFrameOwnerElement*, bool clipToLayerContents) const; > >@@ -782,6 +783,14 @@ private: > void willDoLayout(WeakPtr<RenderElement> layoutRoot); > void didLayout(WeakPtr<RenderElement> layoutRoot); > >+ struct OverrideViewportSize { >+ std::optional<int> width; >+ std::optional<int> height; >+ >+ bool operator==(const OverrideViewportSize& rhs) const { return rhs.width == width && rhs.height == height; } >+ }; >+ void overrideViewportSizeForCSSViewportUnits(OverrideViewportSize); >+ > HashSet<Widget*> m_widgetsInRenderTree; > > static MonotonicTime sCurrentPaintTimeStamp; // used for detecting decoded resource thrash in the cache >@@ -867,8 +876,7 @@ private: > IntSize m_customSizeForResizeEvent; > #endif > >- IntSize m_overrideViewportSize; >- bool m_hasOverrideViewportSize; >+ std::optional<OverrideViewportSize> m_overrideViewportSize; > > // If true, automatically resize the frame view around its content. > bool m_shouldAutoSize; >diff --git a/Tools/DumpRenderTree/mac/DumpRenderTree.mm b/Tools/DumpRenderTree/mac/DumpRenderTree.mm >index f659e94af216c1072fdb0538547fa87a10bcbe9c..d69677bd9ee73a89d2f20645048dc702c96f73b9 100644 >--- a/Tools/DumpRenderTree/mac/DumpRenderTree.mm >+++ b/Tools/DumpRenderTree/mac/DumpRenderTree.mm >@@ -1589,10 +1589,9 @@ static void sizeWebViewForCurrentTest() > > // W3C SVG tests expect to be 480x360 > bool isSVGW3CTest = (gTestRunner->testURL().find("svg/W3C-SVG-1.1") != string::npos); >- if (isSVGW3CTest) >- [[mainFrame webView] setFrameSize:NSMakeSize(TestRunner::w3cSVGViewWidth, TestRunner::w3cSVGViewHeight)]; >- else >- [[mainFrame webView] setFrameSize:NSMakeSize(TestRunner::viewWidth, TestRunner::viewHeight)]; >+ NSSize frameSize = isSVGW3CTest ? NSMakeSize(TestRunner::w3cSVGViewWidth, TestRunner::w3cSVGViewHeight) : NSMakeSize(TestRunner::viewWidth, TestRunner::viewHeight); >+ [[mainFrame webView] setFrameSize:frameSize]; >+ [[mainFrame frameView] setFrame:NSMakeRect(0, 0, frameSize.width, frameSize.height)]; > } > > static const char *methodNameStringForFailedTest() >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index 7be51e1809de28c4ca8fa88e7f4c01b3f5413600..497e27a30592338a0d8cff79529b6994dd69f134 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,14 @@ >+2018-06-23 Zalan Bujtas <zalan@apple.com> >+ >+ [Mail] Use the Mail Viewer width as the base for resolving horizontal viewport units >+ https://bugs.webkit.org/show_bug.cgi?id=186585 >+ <rdar://problem/30685325> >+ >+ Reviewed by Tim Horton. >+ >+ * fast/dynamic/mail-autosize-viewport-unit-expected.txt: Added. >+ * fast/dynamic/mail-autosize-viewport-unit.html: Added. >+ > 2018-06-23 Per Arne Vollan <pvollan@apple.com> > > Layout Test imported/mozilla/css-animations/test_animation-ready.html is failing on Windows. >diff --git a/LayoutTests/fast/dynamic/mail-autosize-viewport-unit-expected.txt b/LayoutTests/fast/dynamic/mail-autosize-viewport-unit-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..165145db57104cb366022745029a92a3fa8b106e >--- /dev/null >+++ b/LayoutTests/fast/dynamic/mail-autosize-viewport-unit-expected.txt >@@ -0,0 +1,2 @@ >+ >+2000px 1000px 200px 0px >diff --git a/LayoutTests/fast/dynamic/mail-autosize-viewport-unit.html b/LayoutTests/fast/dynamic/mail-autosize-viewport-unit.html >new file mode 100644 >index 0000000000000000000000000000000000000000..be083c0f28585e1d72dfb36a7b9791c5efadf8c1 >--- /dev/null >+++ b/LayoutTests/fast/dynamic/mail-autosize-viewport-unit.html >@@ -0,0 +1,51 @@ >+<!DOCTYPE HTML> >+<html> >+<head> >+<title>This tests that autosize uses the min-width as the base for resolving viewport unit values</title> >+<style> >+#w100 { >+ width: 100vw; >+ height: 10px; >+} >+ >+#w50 { >+ width: 50vw; >+ height: 10px; >+} >+ >+#w10 { >+ width: 10vw; >+ height: 10px; >+} >+ >+#w0 { >+ width: 0vw; >+ height: 10px; >+} >+</style> >+<script> >+if (window.internals) >+ internals.enableAutoSizeMode(true, 2000, 600, 4000, 1000); >+ >+if (window.testRunner) >+ testRunner.dumpAsText(); >+</script> >+</head> >+<body> >+<div id=w100></div> >+<div id=w50></div> >+<div id=w10></div> >+<div id=w0></div> >+<img src="notfound.jpg" width=3000px height=100px> >+<pre id=result></pre> >+<script> >+document.body.offsetWidth; >+result.textContent = window.getComputedStyle(w100, null).getPropertyValue("width") + " " >+ + window.getComputedStyle(w50, null).getPropertyValue("width") + " " >+ + window.getComputedStyle(w10, null).getPropertyValue("width") + " " >+ + window.getComputedStyle(w0, null).getPropertyValue("width"); >+if (window.internals) >+ internals.enableAutoSizeMode(false, 0, 0, 0, 0); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/platform/ios/TestExpectations b/LayoutTests/platform/ios/TestExpectations >index 5e0577b6c4b974f56e6b6b296c9cc9fb25861f39..b366d4eed78d3ab644d412a76a67bc6be3763b64 100644 >--- a/LayoutTests/platform/ios/TestExpectations >+++ b/LayoutTests/platform/ios/TestExpectations >@@ -3308,3 +3308,6 @@ webkit.org/b/183258 imported/w3c/web-platform-tests/css/css-text/i18n/css3-text- > webkit.org/b/183258 imported/w3c/web-platform-tests/css/css-text/i18n/css3-text-line-break-opclns-115.html [ ImageOnlyFailure ] > webkit.org/b/183258 imported/w3c/web-platform-tests/css/css-text/i18n/css3-text-line-break-opclns-116.html [ ImageOnlyFailure ] > webkit.org/b/183258 imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-006.html [ ImageOnlyFailure ] >+ >+# unsupported >+fast/dynamic/mail-autosize-viewport-unit.html [ Failure ]
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 186585
:
342624
|
342663
|
342665
|
342669
|
342680
|
342689
|
342694
| 343446