WebKit Bugzilla
Attachment 368389 Details for
Bug 197342
: [iOS] Add a version of viewport shrink-to-fit heuristics that preserves page layout
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Work in progress
bug-197342-20190426232447.patch (text/plain), 20.02 KB, created by
Wenson Hsieh
on 2019-04-26 23:24:47 PDT
(
hide
)
Description:
Work in progress
Filename:
MIME Type:
Creator:
Wenson Hsieh
Created:
2019-04-26 23:24:47 PDT
Size:
20.02 KB
patch
obsolete
>Subversion Revision: 244716 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index bcdf5b92aac7a99d4de885a3f7cfa0a37a390e74..828adf6e6ec011114b31dbf71cccbbbf30902e08 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,22 @@ >+2019-04-26 Wenson Hsieh <wenson_hsieh@apple.com> >+ >+ [iOS] Add a version of viewport shrink-to-fit heuristics that preserves page layout >+ https://bugs.webkit.org/show_bug.cgi?id=197342 >+ <rdar://problem/50063091> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Work in progress. >+ >+ * page/ViewportConfiguration.cpp: >+ (WebCore::ViewportConfiguration::setMinimumEffectiveDeviceWidth): >+ (WebCore::ViewportConfiguration::setIsKnownToLayOutWiderThanViewport): >+ * page/ViewportConfiguration.h: >+ (WebCore::ViewportConfiguration::canIgnoreScalingConstraints const): >+ (WebCore::ViewportConfiguration::minimumEffectiveDeviceWidth const): >+ (WebCore::ViewportConfiguration::shouldIgnoreMinimumEffectiveDeviceWidth const): >+ (WebCore::ViewportConfiguration::setForceAlwaysUserScalable): >+ > 2019-04-26 Jer Noble <jer.noble@apple.com> > > Reduce the number of copies made during SourceBufferPrivateAVFObjC::append() using SharedBuffer >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 3b972d19c0e19c98b16985e0aa38fdaf4b3f9b38..59100d18895f56fd2b4954fed402965da3db6ca5 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,32 @@ >+2019-04-26 Wenson Hsieh <wenson_hsieh@apple.com> >+ >+ [iOS] Add a version of viewport shrink-to-fit heuristics that preserves page layout >+ https://bugs.webkit.org/show_bug.cgi?id=197342 >+ <rdar://problem/50063091> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Work in progress. >+ >+ * Platform/Logging.h: >+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: >+ (WebKit::WebFrameLoaderClient::dispatchDidFinishDocumentLoad): >+ (WebKit::WebFrameLoaderClient::dispatchDidFinishLoad): >+ * WebProcess/WebPage/WebPage.cpp: >+ (WebKit::WebPage::immediatelyShrinkToFitContent): >+ (WebKit::WebPage::mainFrameDidLayout): >+ (WebKit::WebPage::didCommitLoad): >+ (WebKit::WebPage::scheduleShrinkToFitContent): >+ (WebKit::WebPage::shrinkToFitContentTimerFired): >+ (WebKit::WebPage::didFinishDocumentLoad): >+ (WebKit::WebPage::didFinishLoad): >+ * WebProcess/WebPage/WebPage.h: >+ * WebProcess/WebPage/ios/WebPageIOS.mm: >+ (WebKit::WebPage::setViewportConfigurationViewLayoutSize): >+ (WebKit::WebPage::dynamicViewportSizeUpdate): >+ (WebKit::WebPage::resetViewportDefaultConfiguration): >+ (WebKit::WebPage::shouldIgnoreMetaViewport const): >+ > 2019-04-26 Keith Rollin <krollin@apple.com> > > Enable new build rule for post-processing headers when using XCBuild >diff --git a/Source/WebCore/page/ViewportConfiguration.cpp b/Source/WebCore/page/ViewportConfiguration.cpp >index 23e36099ea53ce3d7a9d5ba6af9f96bc43bb9846..907a6672867160a8b01af2740b43f40487fc9f27 100644 >--- a/Source/WebCore/page/ViewportConfiguration.cpp >+++ b/Source/WebCore/page/ViewportConfiguration.cpp >@@ -586,6 +586,29 @@ int ViewportConfiguration::layoutHeight() const > return minimumLayoutSize.height(); > } > >+bool ViewportConfiguration::setMinimumEffectiveDeviceWidth(float width) >+{ >+ m_minimumEffectiveDeviceWidth = width; >+ >+ if (shouldIgnoreMinimumEffectiveDeviceWidth()) >+ return false; >+ >+ updateMinimumLayoutSize(); >+ updateConfiguration(); >+ return true; >+} >+ >+bool ViewportConfiguration::setIsKnownToLayOutWiderThanViewport(bool value) >+{ >+ if (m_isKnownToLayOutWiderThanViewport == value) >+ return false; >+ >+ m_isKnownToLayOutWiderThanViewport = value; >+ updateMinimumLayoutSize(); >+ updateConfiguration(); >+ return true; >+} >+ > #ifndef NDEBUG > > TextStream& operator<<(TextStream& ts, const ViewportConfiguration::Parameters& parameters) >diff --git a/Source/WebCore/page/ViewportConfiguration.h b/Source/WebCore/page/ViewportConfiguration.h >index 66283a96ab4e56825800fa1ca73a58d461889a4d..48151965982fe5cd0b0acfd83a44c4ddf46d8d4e 100644 >--- a/Source/WebCore/page/ViewportConfiguration.h >+++ b/Source/WebCore/page/ViewportConfiguration.h >@@ -86,11 +86,37 @@ public: > WEBCORE_EXPORT bool setViewportArguments(const ViewportArguments&); > > WEBCORE_EXPORT bool setCanIgnoreScalingConstraints(bool); >- void setForceAlwaysUserScalable(bool forceAlwaysUserScalable) { m_forceAlwaysUserScalable = forceAlwaysUserScalable; } >+ bool canIgnoreScalingConstraints() const { return m_canIgnoreScalingConstraints; } >+ >+ WEBCORE_EXPORT bool setMinimumEffectiveDeviceWidth(float); >+ constexpr double minimumEffectiveDeviceWidth() const >+ { >+ if (shouldIgnoreMinimumEffectiveDeviceWidth()) >+ return 0; >+ return m_minimumEffectiveDeviceWidth; >+ } >+ >+ WEBCORE_EXPORT bool setIsKnownToLayOutWiderThanViewport(bool value); >+ >+ constexpr bool shouldIgnoreMinimumEffectiveDeviceWidth() const >+ { >+ if (m_canIgnoreScalingConstraints) >+ return true; >+ >+ if (m_viewportArguments == ViewportArguments()) >+ return false; >+ >+ if ((m_viewportArguments.zoom == 1. || m_viewportArguments.width == ViewportArguments::ValueDeviceWidth) && !m_isKnownToLayOutWiderThanViewport) >+ return true; >+ >+ return false; >+ } > >+ void setForceAlwaysUserScalable(bool forceAlwaysUserScalable) { m_forceAlwaysUserScalable = forceAlwaysUserScalable; } > double layoutSizeScaleFactor() const { return m_layoutSizeScaleFactor; } > > WEBCORE_EXPORT IntSize layoutSize() const; >+ WEBCORE_EXPORT int layoutWidth() const; > WEBCORE_EXPORT double initialScale() const; > WEBCORE_EXPORT double initialScaleIgnoringContentSize() const; > WEBCORE_EXPORT double minimumScale() const; >@@ -98,7 +124,6 @@ public: > double maximumScaleIgnoringAlwaysScalable() const { return m_configuration.maximumScale; } > WEBCORE_EXPORT bool allowsUserScaling() const; > WEBCORE_EXPORT bool allowsUserScalingIgnoringAlwaysScalable() const; >- bool allowsShrinkToFit() const; > bool avoidsUnsafeArea() const { return m_configuration.avoidsUnsafeArea; } > > // Matches a width=device-width, initial-scale=1 viewport. >@@ -120,7 +145,6 @@ private: > void updateConfiguration(); > double viewportArgumentsLength(double length) const; > double initialScaleFromSize(double width, double height, bool shouldIgnoreScalingConstraints) const; >- int layoutWidth() const; > int layoutHeight() const; > > bool shouldOverrideDeviceWidthAndShrinkToFit() const; >@@ -131,27 +155,6 @@ private: > void updateDefaultConfiguration(); > bool canOverrideConfigurationParameters() const; > >- constexpr bool shouldIgnoreMinimumEffectiveDeviceWidth() const >- { >- if (m_canIgnoreScalingConstraints) >- return true; >- >- if (m_viewportArguments == ViewportArguments()) >- return false; >- >- if (m_viewportArguments.width == ViewportArguments::ValueDeviceWidth || m_viewportArguments.zoom == 1.) >- return true; >- >- return false; >- } >- >- constexpr double minimumEffectiveDeviceWidth() const >- { >- if (shouldIgnoreMinimumEffectiveDeviceWidth()) >- return 0; >- return m_minimumEffectiveDeviceWidth; >- } >- > constexpr double forceAlwaysUserScalableMaximumScale() const > { > const double forceAlwaysUserScalableMaximumScaleIgnoringLayoutScaleFactor = 5; >@@ -185,6 +188,7 @@ private: > double m_minimumEffectiveDeviceWidth { 0 }; > bool m_canIgnoreScalingConstraints; > bool m_forceAlwaysUserScalable; >+ bool m_isKnownToLayOutWiderThanViewport { false }; > }; > > WTF::TextStream& operator<<(WTF::TextStream&, const ViewportConfiguration::Parameters&); >diff --git a/Source/WebKit/Platform/Logging.h b/Source/WebKit/Platform/Logging.h >index 4c5cc67441f2b01ba49eadab4d41f3e9081f897d..0ea056a0343ae61cf25940ed3db4baec8d41cdc9 100644 >--- a/Source/WebKit/Platform/Logging.h >+++ b/Source/WebKit/Platform/Logging.h >@@ -84,6 +84,7 @@ extern "C" { > M(TextInput) \ > M(ViewGestures) \ > M(ViewState) \ >+ M(ViewportSizing) \ > M(VirtualMemory) \ > M(VisibleRects) \ > M(WebGL) \ >diff --git a/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp b/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp >index c49bb1ba43cb1a22c15b776183fa246642190ec9..529c04670301b350b132518354a9e5a855b9c48d 100644 >--- a/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp >+++ b/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp >@@ -609,6 +609,8 @@ void WebFrameLoaderClient::dispatchDidFinishDocumentLoad() > > // Notify the UIProcess. > webPage->send(Messages::WebPageProxy::DidFinishDocumentLoadForFrame(m_frame->frameID(), navigationID, UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get()))); >+ >+ webPage->didFinishDocumentLoad(*m_frame); > } > > void WebFrameLoaderClient::dispatchDidFinishLoad() >@@ -631,7 +633,7 @@ void WebFrameLoaderClient::dispatchDidFinishLoad() > if (WebFrame::LoadListener* loadListener = m_frame->loadListener()) > loadListener->didFinishLoad(m_frame); > >- webPage->didFinishLoad(m_frame); >+ webPage->didFinishLoad(*m_frame); > } > > void WebFrameLoaderClient::forcePageTransitionIfNeeded() >diff --git a/Source/WebKit/WebProcess/WebPage/WebPage.cpp b/Source/WebKit/WebProcess/WebPage/WebPage.cpp >index e667474e53211734a502b6936421983fe799773b..725caccb8021754cdf3bb83859da2d52b4e14106 100644 >--- a/Source/WebKit/WebProcess/WebPage/WebPage.cpp >+++ b/Source/WebKit/WebProcess/WebPage/WebPage.cpp >@@ -384,6 +384,7 @@ WebPage::WebPage(uint64_t pageID, WebPageCreationParameters&& parameters) > #elif HAVE(ACCESSIBILITY) && PLATFORM(GTK) > , m_accessibilityObject(nullptr) > #endif >+ , m_shrinkToFitContentTimer(RunLoop::main(), this, &WebPage::shrinkToFitContentTimerFired) > , m_setCanStartMediaTimer(RunLoop::main(), this, &WebPage::setCanStartMediaTimerFired) > #if ENABLE(CONTEXT_MENUS) > , m_contextMenuClient(std::make_unique<API::InjectedBundle::PageContextMenuClient>()) >@@ -675,6 +676,60 @@ WebPage::WebPage(uint64_t pageID, WebPageCreationParameters&& parameters) > #endif > } > >+bool WebPage::immediatelyShrinkToFitContent() >+{ >+ if (!shouldIgnoreMetaViewport()) >+ return false; >+ >+ if (!m_viewportConfiguration.viewportArguments().shrinkToFit) >+ return false; >+ >+ if (m_viewportConfiguration.canIgnoreScalingConstraints()) >+ return false; >+ >+ auto mainFrame = makeRefPtr(m_mainFrame->coreFrame()); >+ if (!mainFrame) >+ return false; >+ >+ auto view = makeRefPtr(mainFrame->view()); >+ auto mainDocument = makeRefPtr(mainFrame->document()); >+ if (!view || !mainDocument) >+ return false; >+ >+ mainDocument->updateLayout(); >+ >+ static const int toleratedHorizontalScrollingDistance = 20; >+ static const int maximumExpandedLayoutWidth = 1280; >+ int originalContentWidth = view->contentsWidth(); >+ int originalLayoutWidth = m_viewportConfiguration.layoutWidth(); >+ int originalHorizontalOverflowAmount = originalContentWidth - originalLayoutWidth; >+ if (originalHorizontalOverflowAmount <= toleratedHorizontalScrollingDistance || originalLayoutWidth >= maximumExpandedLayoutWidth || originalContentWidth <= m_viewportConfiguration.viewLayoutSize().width()) >+ return false; >+ >+ auto changeMinimumEffectiveDeviceWidth = [this, mainDocument] (int targetLayoutWidth) -> bool { >+ if (m_viewportConfiguration.setMinimumEffectiveDeviceWidth(targetLayoutWidth)) { >+ viewportConfigurationChanged(); >+ mainDocument->updateLayout(); >+ return true; >+ } >+ return false; >+ }; >+ >+ freezeLayerTree(LayerTreeFreezeReason::ShrinkToFit); >+ >+ m_viewportConfiguration.setIsKnownToLayOutWiderThanViewport(true); >+ double originalMinimumDeviceWidth = m_viewportConfiguration.minimumEffectiveDeviceWidth(); >+ if (changeMinimumEffectiveDeviceWidth(std::min(maximumExpandedLayoutWidth, originalContentWidth)) && view->contentsWidth() - m_viewportConfiguration.layoutWidth() > originalHorizontalOverflowAmount) { >+ changeMinimumEffectiveDeviceWidth(originalMinimumDeviceWidth); >+ m_viewportConfiguration.setIsKnownToLayOutWiderThanViewport(false); >+ } >+ >+ unfreezeLayerTree(LayerTreeFreezeReason::ShrinkToFit); >+ >+ RELEASE_LOG(ViewportSizing, "Shrink-to-fit: content width %d => %d; layout width %d => %d", originalContentWidth, view->contentsWidth(), originalLayoutWidth, m_viewportConfiguration.layoutWidth()); >+ return true; >+} >+ > #if ENABLE(WEB_RTC) > void WebPage::disableICECandidateFiltering() > { >@@ -4309,7 +4364,7 @@ void WebPage::mainFrameDidLayout() > IntSize newContentSize = frameView->contentsSize(); > LOG_WITH_STREAM(VisibleRects, stream << "WebPage " << m_pageID << " mainFrameDidLayout setting content size to " << newContentSize); > if (m_viewportConfiguration.setContentsSize(newContentSize)) >- viewportConfigurationChanged(); >+ viewportConfigurationChanged(ZoomToInitialScale::Yes); > } > findController().redraw(); > #endif >@@ -5701,6 +5756,7 @@ void WebPage::didCommitLoad(WebFrame* frame) > resetViewportDefaultConfiguration(frame); > const Frame* coreFrame = frame->coreFrame(); > >+ m_shrinkToFitContentTimer.stop(); > bool viewportChanged = false; > > LOG_WITH_STREAM(VisibleRects, stream << "WebPage " << m_pageID << " didCommitLoad setting content size to " << coreFrame->view()->contentsSize()); >@@ -5727,12 +5783,32 @@ void WebPage::didCommitLoad(WebFrame* frame) > updateMainFrameScrollOffsetPinning(); > } > >-void WebPage::didFinishLoad(WebFrame* frame) >+void WebPage::scheduleShrinkToFitContent() > { >- if (!frame->isMainFrame()) >+ m_shrinkToFitContentTimer.stop(); >+ m_shrinkToFitContentTimer.startOneShot(0_s); >+} >+ >+void WebPage::shrinkToFitContentTimerFired() >+{ >+ if (immediatelyShrinkToFitContent()) >+ viewportConfigurationChanged(ZoomToInitialScale::Yes); >+} >+ >+void WebPage::didFinishDocumentLoad(WebFrame& frame) >+{ >+ if (!frame.isMainFrame()) >+ return; >+ >+ scheduleShrinkToFitContent(); >+} >+ >+void WebPage::didFinishLoad(WebFrame& frame) >+{ >+ if (!frame.isMainFrame()) > return; > >- WebProcess::singleton().sendPrewarmInformation(frame->url()); >+ WebProcess::singleton().sendPrewarmInformation(frame.url()); > > #if ENABLE(PRIMARY_SNAPSHOTTED_PLUGIN_HEURISTIC) > m_readyToFindPrimarySnapshottedPlugin = true; >@@ -5741,6 +5817,8 @@ void WebPage::didFinishLoad(WebFrame* frame) > #else > UNUSED_PARAM(frame); > #endif >+ >+ scheduleShrinkToFitContent(); > } > > void WebPage::didInsertMenuElement(HTMLMenuElement& element) >diff --git a/Source/WebKit/WebProcess/WebPage/WebPage.h b/Source/WebKit/WebProcess/WebPage/WebPage.h >index 1f39c4379ee0bc8115ca8ab4f4c6514cb2e42c68..58f55cb8630254163a530d70f2e535fa42e3fb79 100644 >--- a/Source/WebKit/WebProcess/WebPage/WebPage.h >+++ b/Source/WebKit/WebProcess/WebPage/WebPage.h >@@ -349,7 +349,8 @@ public: > void didCommitLoad(WebFrame*); > void willReplaceMultipartContent(const WebFrame&); > void didReplaceMultipartContent(const WebFrame&); >- void didFinishLoad(WebFrame*); >+ void didFinishDocumentLoad(WebFrame&); >+ void didFinishLoad(WebFrame&); > void show(); > String userAgent(const URL&) const; > String platformUserAgent(const URL&) const; >@@ -704,6 +705,7 @@ public: > PageSuspended = 1 << 3, > Printing = 1 << 4, > ProcessSwap = 1 << 5, >+ ShrinkToFit = 1 << 6, > }; > void freezeLayerTree(LayerTreeFreezeReason); > void unfreezeLayerTree(LayerTreeFreezeReason); >@@ -1227,6 +1229,7 @@ private: > InteractionInformationAtPosition positionInformation(const InteractionInformationRequest&); > WebAutocorrectionContext autocorrectionContext(); > bool applyAutocorrectionInternal(const String& correction, const String& originalText); >+ bool shouldIgnoreMetaViewport() const; > #endif > > #if PLATFORM(IOS_FAMILY) && ENABLE(DATA_INTERACTION) >@@ -1553,6 +1556,10 @@ private: > > bool shouldDispatchUpdateAfterFocusingElement(const WebCore::Element&) const; > >+ void scheduleShrinkToFitContent(); >+ void shrinkToFitContentTimerFired(); >+ bool immediatelyShrinkToFitContent(); >+ > uint64_t m_pageID; > > std::unique_ptr<WebCore::Page> m_page; >@@ -1650,6 +1657,7 @@ private: > RefPtr<PageBanner> m_footerBanner; > #endif > >+ RunLoop::Timer<WebPage> m_shrinkToFitContentTimer; > RunLoop::Timer<WebPage> m_setCanStartMediaTimer; > bool m_mayStartMediaWhenInWindow { false }; > >diff --git a/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm b/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm >index ec80a106efa779d68e54a5175957b1216196e542..792814cb3129ca4e36308208001e4f5a64c6f2c7 100644 >--- a/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm >+++ b/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm >@@ -2769,7 +2769,7 @@ void WebPage::setViewportConfigurationViewLayoutSize(const FloatSize& size, doub > LOG_WITH_STREAM(VisibleRects, stream << "WebPage " << m_pageID << " setViewportConfigurationViewLayoutSize " << size << " scaleFactor " << scaleFactor << " minimumEffectiveDeviceWidth " << minimumEffectiveDeviceWidth); > > auto previousLayoutSizeScaleFactor = m_viewportConfiguration.layoutSizeScaleFactor(); >- if (!m_viewportConfiguration.setViewLayoutSize(size, scaleFactor, minimumEffectiveDeviceWidth)) >+ if (!m_viewportConfiguration.setViewLayoutSize(size, scaleFactor, std::max(m_viewportConfiguration.minimumEffectiveDeviceWidth(), minimumEffectiveDeviceWidth))) > return; > > auto zoomToInitialScale = ZoomToInitialScale::No; >@@ -2851,8 +2851,14 @@ void WebPage::dynamicViewportSizeUpdate(const FloatSize& viewLayoutSize, const W > } > > LOG_WITH_STREAM(VisibleRects, stream << "WebPage::dynamicViewportSizeUpdate setting view layout size to " << viewLayoutSize); >- if (m_viewportConfiguration.setViewLayoutSize(viewLayoutSize)) >+ bool viewportChanged = m_viewportConfiguration.setIsKnownToLayOutWiderThanViewport(false); >+ viewportChanged |= m_viewportConfiguration.setViewLayoutSize(viewLayoutSize); >+ if (viewportChanged) > viewportConfigurationChanged(); >+ >+ if (immediatelyShrinkToFitContent()) >+ viewportConfigurationChanged(ZoomToInitialScale::Yes); >+ > IntSize newLayoutSize = m_viewportConfiguration.layoutSize(); > > if (setFixedLayoutSize(newLayoutSize)) >@@ -2998,16 +3004,9 @@ void WebPage::resetViewportDefaultConfiguration(WebFrame* frame, bool hasMobileD > } > > auto parametersForStandardFrame = [&] { >- bool shouldIgnoreMetaViewport = false; >- if (auto* mainDocument = m_page->mainFrame().document()) { >- auto* loader = mainDocument->loader(); >- shouldIgnoreMetaViewport = loader && loader->metaViewportPolicy() == WebCore::MetaViewportPolicy::Ignore; >- } >- >- if (m_page->settings().shouldIgnoreMetaViewport()) >- shouldIgnoreMetaViewport = true; >- >- return shouldIgnoreMetaViewport ? m_viewportConfiguration.nativeWebpageParameters() : ViewportConfiguration::webpageParameters(); >+ if (shouldIgnoreMetaViewport()) >+ return m_viewportConfiguration.nativeWebpageParameters(); >+ return ViewportConfiguration::webpageParameters(); > }; > > if (!frame) { >@@ -3027,6 +3026,17 @@ void WebPage::resetViewportDefaultConfiguration(WebFrame* frame, bool hasMobileD > m_viewportConfiguration.setDefaultConfiguration(ViewportConfiguration::textDocumentParameters()); > else > m_viewportConfiguration.setDefaultConfiguration(parametersForStandardFrame()); >+ m_viewportConfiguration.setIsKnownToLayOutWiderThanViewport(false); >+} >+ >+bool WebPage::shouldIgnoreMetaViewport() const >+{ >+ if (auto* mainDocument = m_page->mainFrame().document()) { >+ auto* loader = mainDocument->loader(); >+ if (loader && loader->metaViewportPolicy() == WebCore::MetaViewportPolicy::Ignore) >+ return true; >+ } >+ return m_page->settings().shouldIgnoreMetaViewport(); > } > > void WebPage::viewportConfigurationChanged(ZoomToInitialScale zoomToInitialScale)
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 197342
:
368389
|
368427
|
368429
|
368436
|
368604
|
368697