Changeset 243961 in webkit
- Timestamp:
- Apr 5, 2019, 8:41:26 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 13 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/fast/viewport/ios/shrink-to-fit-for-page-without-viewport-meta-expected.txt (added)
-
LayoutTests/fast/viewport/ios/shrink-to-fit-for-page-without-viewport-meta.html (added)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/page/ViewportConfiguration.cpp (modified) (2 diffs)
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/Shared/WebPageCreationParameters.cpp (modified) (2 diffs)
-
Source/WebKit/Shared/WebPageCreationParameters.h (modified) (1 diff)
-
Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm (modified) (4 diffs)
-
Source/WebKit/UIProcess/WebPageProxy.cpp (modified) (1 diff)
-
Source/WebKit/UIProcess/WebPageProxy.h (modified) (2 diffs)
-
Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm (modified) (1 diff)
-
Source/WebKit/WebProcess/WebPage/WebPage.cpp (modified) (1 diff)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r243958 r243961 1 2019-04-05 Yongjun Zhang <yongjun_zhang@apple.com> 2 3 We should pass minimumEffectiveDeviceWidth to web process on new page creation. 4 https://bugs.webkit.org/show_bug.cgi?id=196077 5 <rdar://problem/49108202> 6 7 Reviewed by Chris Dumez. 8 9 Add a layout test to verify the page shrinks to fit the window width when ignoreMetaViewport 10 flag is turned on. 11 12 * fast/viewport/ios/shrink-to-fit-for-page-without-viewport-meta-expected.txt: Added. 13 * fast/viewport/ios/shrink-to-fit-for-page-without-viewport-meta.html: Added. 14 1 15 2019-04-05 Jer Noble <jer.noble@apple.com> 2 16 -
trunk/Source/WebCore/ChangeLog
r243958 r243961 1 2019-04-05 Yongjun Zhang <yongjun_zhang@apple.com> 2 3 We should pass minimumEffectiveDeviceWidth to web process on new page creation. 4 https://bugs.webkit.org/show_bug.cgi?id=196077 5 <rdar://problem/49108202> 6 7 Reviewed by Chris Dumez. 8 9 If the page doesn't specify it requires to use the device width in viewport tag, we should try to scale down 10 the page to fit the window width. 11 12 Test: fast/viewport/ios/shrink-to-fit-for-page-without-viewport-meta.html 13 14 * page/ViewportConfiguration.cpp: 15 (WebCore::ViewportConfiguration::updateDefaultConfiguration): Also update the minimum layout size 16 when the default configuration is changed. 17 (WebCore::ViewportConfiguration::nativeWebpageParametersWithShrinkToFit): Make sure we fit the content 18 to window width. 19 1 20 2019-04-05 Jer Noble <jer.noble@apple.com> 2 21 -
trunk/Source/WebCore/page/ViewportConfiguration.cpp
r242069 r243961 178 178 m_canIgnoreScalingConstraints = canIgnoreScalingConstraints; 179 179 updateDefaultConfiguration(); 180 updateMinimumLayoutSize(); 180 181 updateConfiguration(); 181 182 return true; … … 354 355 parameters.allowsShrinkToFit = true; 355 356 parameters.minimumScale = 0.25; 357 parameters.initialScaleIsSet = false; 356 358 return parameters; 357 359 } -
trunk/Source/WebKit/ChangeLog
r243958 r243961 1 2019-04-05 Yongjun Zhang <yongjun_zhang@apple.com> 2 3 We should pass minimumEffectiveDeviceWidth to web process on new page creation. 4 https://bugs.webkit.org/show_bug.cgi?id=196077 5 <rdar://problem/49108202> 6 7 Reviewed by Chris Dumez. 8 9 When a new web view is created, it is possible we don't have the web content process till a load 10 is requested. This patch stashes minimumEffectiveDeviceWidth in WebPageProxy.cpp and passes that 11 value down to web process via WebPageCreationParameters when a new process is created, just like 12 we did for other values like viewportConfigurationLayoutSizeScaleFactor or viewportConfigurationViewLayoutSize. 13 14 * Shared/WebPageCreationParameters.cpp: 15 (WebKit::WebPageCreationParameters::encode const): Encode viewportConfigurationMinimumEffectiveDeviceWidth value. 16 (WebKit::WebPageCreationParameters::decode): Decode viewportConfigurationMinimumEffectiveDeviceWidth value. 17 * Shared/WebPageCreationParameters.h: 18 * UIProcess/API/Cocoa/WKWebView.mm: Now that we stash the minimumEffectiveDeviceWidth value in WebPageProxy, we 19 don't need the iVar in WKWebView any more. 20 (-[WKWebView _dispatchSetViewLayoutSize:]): Use _page->minimumEffectiveDeviceWidth(). 21 (-[WKWebView _setViewScale:]): Ditto. 22 (-[WKWebView _setMinimumEffectiveDeviceWidth:]): Ditto. 23 (-[WKWebView _minimumEffectiveDeviceWidth]): Ditto. 24 * UIProcess/WebPageProxy.cpp: 25 (WebKit::WebPageProxy::creationParameters): Also add viewportConfigurationMinimumEffectiveDeviceWidth to 26 web process creation parameter. 27 * UIProcess/WebPageProxy.h: 28 (WebKit::WebPageProxy::minimumEffectiveDeviceWidth const): Returns m_viewportConfigurationMinimumEffectiveDeviceWidth. 29 * UIProcess/ios/WebPageProxyIOS.mm: 30 (WebKit::WebPageProxy::setViewportConfigurationViewLayoutSize): Pass parameters.viewportConfigurationMinimumEffectiveDeviceWidth 31 to web process. 32 * WebProcess/WebPage/WebPage.cpp: 33 (WebKit::WebPage::WebPage): Take viewportConfigurationMinimumEffectiveDeviceWidth value from the parameter and 34 set that to viewport configuration. 35 1 36 2019-04-05 Jer Noble <jer.noble@apple.com> 2 37 -
trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp
r243630 r243961 91 91 encoder << viewportConfigurationViewLayoutSize; 92 92 encoder << viewportConfigurationLayoutSizeScaleFactor; 93 encoder << viewportConfigurationMinimumEffectiveDeviceWidth; 93 94 encoder << viewportConfigurationViewSize; 94 95 encoder << maximumUnobscuredSize; … … 269 270 if (!decoder.decode(parameters.viewportConfigurationLayoutSizeScaleFactor)) 270 271 return WTF::nullopt; 272 if (!decoder.decode(parameters.viewportConfigurationMinimumEffectiveDeviceWidth)) 273 return WTF::nullopt; 271 274 if (!decoder.decode(parameters.viewportConfigurationViewSize)) 272 275 return WTF::nullopt; -
trunk/Source/WebKit/Shared/WebPageCreationParameters.h
r243630 r243961 149 149 WebCore::FloatSize viewportConfigurationViewLayoutSize; 150 150 double viewportConfigurationLayoutSizeScaleFactor; 151 double viewportConfigurationMinimumEffectiveDeviceWidth; 151 152 WebCore::FloatSize viewportConfigurationViewSize; 152 153 WebCore::FloatSize maximumUnobscuredSize; -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
r243956 r243961 383 383 #endif 384 384 _WKSelectionAttributes _selectionAttributes; 385 CGFloat _minimumEffectiveDeviceWidth;386 385 } 387 386 … … 2845 2844 2846 2845 LOG_WITH_STREAM(VisibleRects, stream << "-[WKWebView " << _page->pageID() << " _dispatchSetViewLayoutSize:] " << viewLayoutSize << " contentZoomScale " << contentZoomScale(self)); 2847 _page->setViewportConfigurationViewLayoutSize(viewLayoutSize, _page->layoutSizeScaleFactor(), _ minimumEffectiveDeviceWidth);2846 _page->setViewportConfigurationViewLayoutSize(viewLayoutSize, _page->layoutSizeScaleFactor(), _page->minimumEffectiveDeviceWidth()); 2848 2847 _lastSentViewLayoutSize = viewLayoutSize; 2849 2848 } … … 5689 5688 return; 5690 5689 5691 _page->setViewportConfigurationViewLayoutSize([self activeViewLayoutSize:self.bounds], viewScale, _ minimumEffectiveDeviceWidth);5690 _page->setViewportConfigurationViewLayoutSize([self activeViewLayoutSize:self.bounds], viewScale, _page->minimumEffectiveDeviceWidth()); 5692 5691 #endif 5693 5692 } … … 5695 5694 - (void)_setMinimumEffectiveDeviceWidth:(CGFloat)minimumEffectiveDeviceWidth 5696 5695 { 5697 if (_minimumEffectiveDeviceWidth == minimumEffectiveDeviceWidth) 5696 #if PLATFORM(IOS_FAMILY) 5697 if (_page->minimumEffectiveDeviceWidth() == minimumEffectiveDeviceWidth) 5698 5698 return; 5699 5699 5700 _minimumEffectiveDeviceWidth = minimumEffectiveDeviceWidth; 5700 _page->setViewportConfigurationViewLayoutSize([self activeViewLayoutSize:self.bounds], _page->layoutSizeScaleFactor(), minimumEffectiveDeviceWidth); 5701 #endif 5702 } 5703 5704 - (CGFloat)_minimumEffectiveDeviceWidth 5705 { 5701 5706 #if PLATFORM(IOS_FAMILY) 5702 _page->setViewportConfigurationViewLayoutSize([self activeViewLayoutSize:self.bounds], _page->layoutSizeScaleFactor(), _minimumEffectiveDeviceWidth); 5703 #endif 5704 } 5705 5706 - (CGFloat)_minimumEffectiveDeviceWidth 5707 { 5708 return _minimumEffectiveDeviceWidth; 5707 return _page->minimumEffectiveDeviceWidth(); 5708 #else 5709 return 0; 5710 #endif 5709 5711 } 5710 5712 -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r243899 r243961 7024 7024 parameters.viewportConfigurationViewLayoutSize = m_viewportConfigurationViewLayoutSize; 7025 7025 parameters.viewportConfigurationLayoutSizeScaleFactor = m_viewportConfigurationLayoutSizeScaleFactor; 7026 parameters.viewportConfigurationMinimumEffectiveDeviceWidth = m_viewportConfigurationMinimumEffectiveDeviceWidth; 7026 7027 parameters.maximumUnobscuredSize = m_maximumUnobscuredSize; 7027 7028 parameters.deviceOrientation = m_deviceOrientation; -
trunk/Source/WebKit/UIProcess/WebPageProxy.h
r243899 r243961 701 701 bool forceAlwaysUserScalable() const { return m_forceAlwaysUserScalable; } 702 702 double layoutSizeScaleFactor() const { return m_viewportConfigurationLayoutSizeScaleFactor; } 703 double minimumEffectiveDeviceWidth() const { return m_viewportConfigurationMinimumEffectiveDeviceWidth; } 703 704 void setIsScrollingOrZooming(bool); 704 705 void requestRectsForGranularityWithSelectionOffset(WebCore::TextGranularity, uint32_t offset, WTF::Function<void(const Vector<WebCore::SelectionRect>&, CallbackBase::Error)>&&); … … 2421 2422 WebCore::FloatSize m_viewportConfigurationViewLayoutSize; 2422 2423 double m_viewportConfigurationLayoutSizeScaleFactor { 1 }; 2424 double m_viewportConfigurationMinimumEffectiveDeviceWidth { 0 }; 2423 2425 WebCore::FloatSize m_maximumUnobscuredSize; 2424 2426 #endif -
trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm
r243797 r243961 330 330 m_viewportConfigurationViewLayoutSize = size; 331 331 m_viewportConfigurationLayoutSizeScaleFactor = scaleFactor; 332 m_viewportConfigurationMinimumEffectiveDeviceWidth = minimumEffectiveDeviceWidth; 332 333 333 334 if (hasRunningProcess()) -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp
r243762 r243961 661 661 662 662 #if PLATFORM(IOS_FAMILY) 663 setViewportConfigurationViewLayoutSize(parameters.viewportConfigurationViewLayoutSize, parameters.viewportConfigurationLayoutSizeScaleFactor, 0);663 setViewportConfigurationViewLayoutSize(parameters.viewportConfigurationViewLayoutSize, parameters.viewportConfigurationLayoutSizeScaleFactor, parameters.viewportConfigurationMinimumEffectiveDeviceWidth); 664 664 setMaximumUnobscuredSize(parameters.maximumUnobscuredSize); 665 665 #endif -
trunk/Tools/ChangeLog
r243960 r243961 1 2019-04-05 Yongjun Zhang <yongjun_zhang@apple.com> 2 3 We should pass minimumEffectiveDeviceWidth to web process on new page creation. 4 https://bugs.webkit.org/show_bug.cgi?id=196077 5 <rdar://problem/49108202> 6 7 Reviewed by Chris Dumez. 8 9 Add an API test to verify the minimumEffectDeviceWidth is passed to web content process 10 on new web view. 11 12 * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: 13 1 14 2019-04-05 Saam Barati <sbarati@apple.com> 2 15 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm
r243935 r243961 5887 5887 } 5888 5888 5889 static const char* minimumWidthPageBytes = R"PSONRESOURCE( 5890 <!DOCTYPE html> 5891 <html> 5892 <head> 5893 <style> 5894 div { 5895 margin: 0; 5896 width: 100%; 5897 height: 10000px; 5898 } 5899 </style> 5900 </head> 5901 <body> 5902 <div>Test</a> 5903 </body> 5904 </html> 5905 )PSONRESOURCE"; 5906 5907 TEST(ProcessSwap, PassMinimumDeviceWidthOnNewWebView) 5908 { 5909 auto processPoolConfiguration = psonProcessPoolConfiguration(); 5910 auto processPool = adoptNS([[WKProcessPool alloc] _initWithConfiguration:processPoolConfiguration.get()]); 5911 5912 auto webViewConfiguration = adoptNS([[WKWebViewConfiguration alloc] init]); 5913 [webViewConfiguration setProcessPool:processPool.get()]; 5914 auto handler = adoptNS([[PSONScheme alloc] init]); 5915 [handler addMappingFromURLString:@"pson://www.webkit.org/main.html" toData:minimumWidthPageBytes]; 5916 [webViewConfiguration setURLSchemeHandler:handler.get() forURLScheme:@"PSON"]; 5917 5918 auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:webViewConfiguration.get()]); 5919 5920 auto navigationDelegate = adoptNS([[PSONNavigationDelegate alloc] init]); 5921 [webView setNavigationDelegate:navigationDelegate.get()]; 5922 5923 auto preferences = [[webView configuration] preferences]; 5924 [preferences _setShouldIgnoreMetaViewport:YES]; 5925 [webView _setMinimumEffectiveDeviceWidth:1024]; 5926 5927 auto* request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"pson://www.webkit.org/main.html"]]; 5928 [webView loadRequest:request]; 5929 5930 TestWebKitAPI::Util::run(&done); 5931 done = false; 5932 5933 bool finishedRunningScript = false; 5934 [webView evaluateJavaScript:@"window.innerWidth" completionHandler: [&] (id result, NSError *error) { 5935 NSNumber *width = (NSNumber *)result; 5936 EXPECT_EQ(1024, [width intValue]); 5937 finishedRunningScript = true; 5938 }]; 5939 TestWebKitAPI::Util::run(&finishedRunningScript); 5940 } 5941 5889 5942 #endif
Note:
See TracChangeset
for help on using the changeset viewer.